2023-11-12 13:49:57 +00:00
|
|
|
|
|
|
|
.nolist
|
|
|
|
#include "tse.inc"
|
|
|
|
.list
|
|
|
|
.org saferam1-3
|
|
|
|
.db $BB,$6D
|
|
|
|
ret
|
|
|
|
flags_base .equ 89F0h
|
|
|
|
flags_size .equ 60
|
|
|
|
sp_size .equ 2
|
|
|
|
task_sp .equ 0
|
|
|
|
task_flags .equ task_sp + sp_size
|
|
|
|
task_end .equ task_flags + flags_size
|
|
|
|
maxblocksize .equ 100h
|
|
|
|
start:
|
|
|
|
jr startkrnl
|
2023-11-12 18:29:17 +00:00
|
|
|
jp verinfo
|
|
|
|
jp chkprog
|
|
|
|
jp exitshell
|
|
|
|
jp taskswitch
|
|
|
|
jp starttask
|
|
|
|
jp endtask
|
|
|
|
jp forceyield
|
2023-11-12 13:49:57 +00:00
|
|
|
verinfo
|
|
|
|
ld hl, %0000000001111111
|
|
|
|
majorver .equ 1
|
|
|
|
minorver .equ 6
|
|
|
|
ld bc, (majorver*256)+minorver
|
|
|
|
ret
|
|
|
|
startkrnl:
|
|
|
|
bcall(_runIndicOff)
|
|
|
|
ld bc, flags_size
|
|
|
|
ld hl, flags_base
|
|
|
|
ld de, sysflags
|
|
|
|
ldir
|
|
|
|
ld hl, shellprog
|
|
|
|
ld de, cprogram
|
|
|
|
bcall(_mov9b)
|
|
|
|
ld hl, cprogram
|
2023-11-12 18:29:17 +00:00
|
|
|
rst 20h
|
2023-11-12 13:49:57 +00:00
|
|
|
call starttask
|
|
|
|
cp 0
|
|
|
|
ret nz
|
|
|
|
call chkEnoughForBuffer
|
|
|
|
ld (sysstack), sp
|
|
|
|
jp taskenter
|
|
|
|
exitshell:
|
|
|
|
ld hl, (sysstack)
|
|
|
|
ld sp, hl
|
|
|
|
call cpy_prgm_out
|
|
|
|
ld hl, shellprog
|
2023-11-12 18:29:17 +00:00
|
|
|
rst 20h
|
2023-11-12 13:49:57 +00:00
|
|
|
call endtask
|
|
|
|
bcall(_clrScrnFull)
|
|
|
|
ld hl, 0
|
|
|
|
ld (currow), hl
|
|
|
|
ld hl, msg
|
|
|
|
bcall(_puts)
|
|
|
|
res onInterrupt, (iy+onFlags)
|
|
|
|
ret
|
|
|
|
forceyield:
|
|
|
|
ld hl, shellprog
|
2023-11-12 18:29:17 +00:00
|
|
|
rst 20h
|
2023-11-12 13:49:57 +00:00
|
|
|
call taskswitch
|
|
|
|
ret
|
|
|
|
taskswitch:
|
|
|
|
ld (tempword), sp
|
|
|
|
ld hl, (pptr_preserve)
|
|
|
|
push hl
|
|
|
|
ld de, (tempword)
|
|
|
|
ld (hl), e
|
|
|
|
inc hl
|
|
|
|
ld (hl), d
|
|
|
|
ld hl, op1
|
|
|
|
ld de, tprogram
|
|
|
|
bcall(_mov9b)
|
|
|
|
pop hl
|
|
|
|
inc hl
|
|
|
|
inc hl
|
|
|
|
ex de, hl
|
|
|
|
ld bc, flags_size
|
|
|
|
ld hl, flags_base
|
|
|
|
ldir
|
|
|
|
ld hl, 0
|
|
|
|
ld (currow), hl
|
|
|
|
set textInverse, (iy+textflags)
|
|
|
|
ld hl, plswait
|
|
|
|
bcall(_puts)
|
|
|
|
ld hl, (sysstack)
|
|
|
|
ld sp, hl
|
|
|
|
call chkEnoughForBuffer
|
|
|
|
call cpy_prgm_out
|
|
|
|
ld hl, tprogram
|
|
|
|
ld de, cprogram
|
|
|
|
bcall(_mov9b)
|
|
|
|
taskenter:
|
|
|
|
call chkEnoughForBuffer
|
|
|
|
call cpy_prgm_in
|
|
|
|
ld hl, (pptr_preserve)
|
|
|
|
inc hl
|
|
|
|
inc hl
|
|
|
|
ld bc, flags_size
|
|
|
|
ld de, flags_base
|
|
|
|
ldir
|
|
|
|
ld hl, (pptr_preserve)
|
|
|
|
bcall(_ldHLind)
|
|
|
|
ld sp, hl
|
|
|
|
ret
|
|
|
|
endtask:
|
|
|
|
call chkprog
|
|
|
|
cp 0
|
|
|
|
ret nz
|
|
|
|
ld hl, (fptr_prgtitle)
|
|
|
|
ld a, (hl)
|
|
|
|
cp ' '
|
2023-11-12 18:29:17 +00:00
|
|
|
ld a, 4
|
2023-11-12 13:49:57 +00:00
|
|
|
ret z
|
|
|
|
ld hl, (fptr_memreq)
|
|
|
|
bcall(_ldHLind)
|
|
|
|
ex de, hl
|
|
|
|
ld hl, task_end
|
|
|
|
add hl, de
|
|
|
|
push hl
|
|
|
|
push hl
|
|
|
|
ex de, hl
|
|
|
|
ld hl, (fptr_end)
|
|
|
|
or a
|
|
|
|
sbc hl, de
|
|
|
|
pop de
|
|
|
|
bcall(_delmem)
|
|
|
|
ld hl, (fptr_varsize)
|
|
|
|
bcall(_ldHLind)
|
|
|
|
pop bc
|
|
|
|
or a
|
|
|
|
sbc hl, bc
|
|
|
|
ex de, hl
|
|
|
|
ld hl, (fptr_varsize)
|
|
|
|
ld (hl), e
|
|
|
|
inc hl
|
|
|
|
ld (hl), d
|
|
|
|
ld hl, (fptr_prgtitle)
|
|
|
|
ld a, ' '
|
|
|
|
ld (hl), a
|
|
|
|
xor a
|
|
|
|
ret
|
2023-11-12 18:29:17 +00:00
|
|
|
isr.power_on:
|
|
|
|
ld a, kg_func
|
|
|
|
rowread
|
|
|
|
cp invmask(kb_2nd)
|
|
|
|
jr nz, isr.2nd_raised
|
|
|
|
res calc_on, (hl)
|
|
|
|
ld hl, isr.shut_down
|
|
|
|
push hl
|
|
|
|
jr isr.wait_on
|
|
|
|
isr.force_off:
|
|
|
|
ld hl, os.status_flags
|
|
|
|
res calc_on, (hl)
|
|
|
|
isr.shut_down:
|
|
|
|
di
|
2023-11-12 13:49:57 +00:00
|
|
|
push af
|
2023-11-12 18:29:17 +00:00
|
|
|
lcd_busy
|
|
|
|
ld a, $02
|
|
|
|
out (lcd_cmd_port), a
|
2023-11-12 13:49:57 +00:00
|
|
|
pop af
|
2023-11-12 18:29:17 +00:00
|
|
|
isr.off_loop:
|
2023-11-12 13:49:57 +00:00
|
|
|
push af
|
|
|
|
ld a, $36
|
|
|
|
out (irq_stat_port), a
|
|
|
|
ld a, $01
|
|
|
|
out (irq_mask_port), a
|
|
|
|
pop af
|
|
|
|
ei
|
|
|
|
halt
|
|
|
|
jr isr.off_loop
|
|
|
|
isr.2nd_raised:
|
|
|
|
ld hl, os.contrast
|
|
|
|
ld a, kg_arrows
|
|
|
|
rowread
|
|
|
|
bit kb_up, a
|
|
|
|
jr nz, isr.up_raised
|
|
|
|
isr.wait_up:
|
|
|
|
ld a, kg_arrows
|
|
|
|
rowread
|
|
|
|
bit kb_up, a
|
|
|
|
jr z, isr.wait_up
|
|
|
|
ld a, (hl)
|
|
|
|
inc a
|
|
|
|
jr z, isr.contrast_max
|
|
|
|
out (lcd_cmd_port), a
|
|
|
|
ld (hl), a
|
|
|
|
isr.contrast_max:
|
|
|
|
ld a, sk_up
|
|
|
|
ld (os.prev_key), a
|
2023-11-12 18:29:17 +00:00
|
|
|
JR ISR.END
|
|
|
|
ISR.UP_RAISED:
|
|
|
|
BIT KB_DOWN, A
|
|
|
|
JR NZ, ISR.END
|
|
|
|
ISR.WAIT_DOWN:
|
|
|
|
LD A, KG_ARROWS
|
|
|
|
ROWREAD
|
|
|
|
BIT KB_DOWN, A
|
|
|
|
JR Z, ISR.WAIT_DOWN
|
|
|
|
LD A, (HL)
|
|
|
|
CP $C0
|
|
|
|
JR Z, ISR.CONTRAST_MIN
|
|
|
|
DEC A
|
|
|
|
OUT (LCD_CMD_PORT), A
|
|
|
|
LD (HL), A
|
|
|
|
ISR.CONTRAST_MIN:
|
|
|
|
LD A, SK_DOWN
|
|
|
|
LD (OS.PREV_KEY), A
|
|
|
|
JR ISR.END
|
|
|
|
INIT:
|
|
|
|
DI
|
|
|
|
IM 1
|
|
|
|
IN A, (HW_PORT)
|
|
|
|
OR A
|
|
|
|
AND $80
|
|
|
|
JP NZ, INIT.BASIC
|
|
|
|
LD A, $81
|
|
|
|
OUT ($07), A
|
|
|
|
DEC A
|
|
|
|
OUT ($08), A
|
|
|
|
XOR A
|
|
|
|
OUT ($08), A
|
|
|
|
OUT ($05), A
|
|
|
|
OUT ($20), A
|
|
|
|
OUT ($30), A
|
|
|
|
OUT ($33), A
|
|
|
|
OUT ($36), A
|
|
|
|
LD A, $14
|
|
|
|
OUT ($29), A
|
|
|
|
INIT.BASIC:
|
|
|
|
XOR A
|
|
|
|
OUT (LINK_PORT), A
|
|
|
|
LD A, $01
|
|
|
|
OUT (IRQ_MASK_PORT), A
|
|
|
|
LD A, $76
|
|
|
|
OUT (IRQ_STAT_PORT), A
|
|
|
|
LD A, $41
|
|
|
|
OUT ($07), A
|
|
|
|
LD SP, $0000
|
|
|
|
LD HL, INIT.LCD_OUT
|
|
|
|
LD B, 5
|
|
|
|
INIT.LCD_LOOP:
|
|
|
|
LCD_BUSY
|
|
|
|
LD A, (HL)
|
|
|
|
INC HL
|
|
|
|
OUT (LCD_CMD_PORT), A
|
|
|
|
DJNZ INIT.LCD_LOOP
|
2023-11-12 13:49:57 +00:00
|
|
|
|
2023-11-12 18:29:17 +00:00
|
|
|
LD HL, $8000
|
|
|
|
LD DE, $8001
|
|
|
|
LD BC, $8000
|
|
|
|
LD (HL), 0
|
|
|
|
LDIR
|
|
|
|
LD A, $F0
|
|
|
|
LD (OS.CONTRAST), A
|
|
|
|
LD A, BITMASK(CALC_ON) | BITMASK(APS_ON)
|
|
|
|
LD (OS.STATUS_FLAGS), A
|
|
|
|
LD HL, APS_TIME
|
|
|
|
LD (OS.APS_TIMER), HL
|
|
|
|
LD HL, USER_RAM
|
|
|
|
LD (OS.FREE_MEM_PTR), HL
|
|
|
|
LD HL, $0000
|
|
|
|
LD (OS.TEMP_NUM), HL
|
|
|
|
IN A, (IRQ_STAT_PORT)
|
|
|
|
AND $08
|
|
|
|
JR NZ, $-4
|
|
|
|
CALL ISR.FORCE_OFF
|
|
|
|
CALL ZP.CCLEAR
|
|
|
|
CALL ZP.CREDRAW
|
|
|
|
CALL ZP.VBUFDISP
|
|
|
|
LD HL, INIT.STR_CLEAR
|
|
|
|
CALL ZP.CPUTS
|
|
|
|
CALL ZP.CDISP
|
|
|
|
JP INIT.ALL_GOOD
|
|
|
|
INIT.LCD_OUT .DB $18, $01, $F0, $40, $05
|
|
|
|
INIT.STR_CLEAR .DB "MEM CLEARED", 0
|
|
|
|
#INCLUDE "LIBSRC\\STRING\\TOKENIZE.Z80"
|
|
|
|
.ECHO "\N"
|
|
|
|
INIT.ALL_GOOD:
|
|
|
|
EI
|
|
|
|
ZP.CONSOLE: .EXPORT ZP.CONSOLE
|
|
|
|
LD HL, ZP.CONSOLE
|
|
|
|
PUSH HL
|
|
|
|
LD HL, OS.ARG_PTRS
|
|
|
|
LD DE, OS.ARG_PTRS + 1
|
|
|
|
LD (HL), 0
|
|
|
|
LD BC, 127
|
|
|
|
LDIR
|
|
|
|
CALL ZP.CGETS
|
|
|
|
LD HL, OS.BUFFER
|
|
|
|
LD D, H
|
|
|
|
LD E, L
|
|
|
|
LD IX, OS.ARG_PTRS
|
|
|
|
CALL ZP.TOKENIZE
|
|
|
|
LD A, C
|
|
|
|
LD (OS.ARG_COUNT), A
|
|
|
|
LD HL, (ARG(0))
|
|
|
|
CALL ZP.STRUPR
|
|
|
|
LDIR
|