7cf3ed38da
Most of register fiddling routines (which is now the only thing contained in care.asm) are used by almost all userspace apps, often in inner loops. That makes the penalty of using jump tables for those a bit too high. Moreover, it burdens jump tables needlessly. Because this unit is very small (now that string routines are out), it makes sense to always include it in binaries.
98 lines
1.3 KiB
NASM
98 lines
1.3 KiB
NASM
.equ RAMSTART 0x8000
|
|
.equ RAMEND 0xbfff
|
|
.equ PORT_INT_MASK 0x03
|
|
.equ INT_MASK_ON 0x00
|
|
.equ PORT_INT_TRIG 0x04
|
|
.equ INT_TRIG_ON 0x00
|
|
.equ PORT_BANKB 0x07
|
|
|
|
jp boot
|
|
|
|
.fill 0x18-$
|
|
jp boot ; reboot
|
|
|
|
.fill 0x38-$
|
|
jp handleInterrupt
|
|
|
|
.fill 0x53-$
|
|
jp boot
|
|
; 0x0056
|
|
.db 0xFF, 0xA5, 0xFF
|
|
|
|
.fill 0x64-$
|
|
|
|
.inc "err.h"
|
|
.inc "ascii.h"
|
|
.inc "core.asm"
|
|
.inc "str.asm"
|
|
.equ FNT_WIDTH 3
|
|
.equ FNT_HEIGHT 5
|
|
.inc "fnt/mgm.asm"
|
|
.equ LCD_RAMSTART RAMSTART
|
|
.inc "ti/lcd.asm"
|
|
.equ KBD_RAMSTART LCD_RAMEND
|
|
.inc "ti/kbd.asm"
|
|
.equ STDIO_RAMSTART KBD_RAMEND
|
|
.equ STDIO_GETC kbdGetC
|
|
.equ STDIO_PUTC lcdPutC
|
|
.inc "stdio.asm"
|
|
|
|
.inc "parse.asm"
|
|
.equ SHELL_RAMSTART STDIO_RAMEND
|
|
.equ SHELL_EXTRA_CMD_COUNT 0
|
|
.inc "shell.asm"
|
|
|
|
boot:
|
|
di
|
|
ld hl, RAMEND
|
|
ld sp, hl
|
|
im 1
|
|
|
|
; enable ON key interrupt
|
|
in a, (PORT_INT_MASK)
|
|
set INT_MASK_ON, a
|
|
out (PORT_INT_MASK), a
|
|
ld a, 0x80
|
|
out (PORT_BANKB), a
|
|
|
|
ei
|
|
|
|
call lcdOff
|
|
|
|
; sleep until we press ON
|
|
halt
|
|
|
|
main:
|
|
call kbdInit
|
|
call lcdInit
|
|
xor a
|
|
call lcdSetCol
|
|
call shellInit
|
|
jp shellLoop
|
|
|
|
handleInterrupt:
|
|
di
|
|
push af
|
|
|
|
; did we push the ON button?
|
|
in a, (PORT_INT_TRIG)
|
|
bit INT_TRIG_ON, a
|
|
jp z, .done ; no? we're done
|
|
|
|
; yes? acknowledge and boot
|
|
in a, (PORT_INT_MASK)
|
|
res INT_MASK_ON, a ; acknowledge interrupt
|
|
out (PORT_INT_MASK), a
|
|
|
|
pop af
|
|
ei
|
|
jp main
|
|
|
|
.done:
|
|
pop af
|
|
ei
|
|
reti
|
|
|
|
FNT_DATA:
|
|
.bin "fnt/3x5.bin"
|