@@ -1,116 +0,0 @@ | |||
.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" | |||
; *** BASIC *** | |||
; RAM space used in different routines for short term processing. | |||
.equ SCRATCHPAD_SIZE STDIO_BUFSIZE | |||
.equ SCRATCHPAD STDIO_RAMEND | |||
.inc "lib/util.asm" | |||
.inc "lib/ari.asm" | |||
.inc "lib/parse.asm" | |||
.inc "lib/fmt.asm" | |||
.equ EXPR_PARSE parseLiteralOrVar | |||
.inc "lib/expr.asm" | |||
.inc "basic/util.asm" | |||
.inc "basic/parse.asm" | |||
.inc "basic/tok.asm" | |||
.equ VAR_RAMSTART SCRATCHPAD+SCRATCHPAD_SIZE | |||
.inc "basic/var.asm" | |||
.equ BUF_RAMSTART VAR_RAMEND | |||
.inc "basic/buf.asm" | |||
.equ BAS_RAMSTART BUF_RAMEND | |||
.inc "basic/main.asm" | |||
.out BAS_RAMEND | |||
boot: | |||
di | |||
ld sp, RAMEND | |||
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: | |||
; Fun fact: if I place this line just above basStart like I would | |||
; normally do, my TI-84+ refuses to validate the binary. But placed | |||
; here, validation works fine. | |||
call basInit | |||
call kbdInit | |||
call lcdInit | |||
xor a | |||
call lcdSetCol | |||
jp basStart | |||
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" |
@@ -1,2 +0,0 @@ | |||
; RAMSTART + kernel usage + safety buffer | |||
.equ USER_RAMSTART 0x8040 |
@@ -18,8 +18,8 @@ RAMSTART 0x72 + CONSTANT KBD_MEM | |||
offset the binary by 0x100, which is our minimum possible | |||
increment and fill the TI stuff with the code below. ) | |||
0x100 JPnn, 0x15 ZFILL, ( 0x18 ) | |||
0x100 JPnn, ( reboot ) 0x1d ZFILL, ( 0x38 ) | |||
0x5a JPnn, 0x15 ZFILL, ( 0x18 ) | |||
0x5a JPnn, ( reboot ) 0x1d ZFILL, ( 0x38 ) | |||
( handleInterrupt ) | |||
DI, | |||
AF PUSHqq, | |||
@@ -40,8 +40,23 @@ EI, | |||
RETI, | |||
0x03 ZFILL, ( 0x53 ) | |||
0x100 JPnn, ( 0x56 ) 0xff A, 0xa5 A, 0xff A, | |||
0xa7 ZFILL, ( 0x100 ) | |||
0x5a JPnn, ( 0x56 ) 0xff A, 0xa5 A, 0xff A, ( 0x5a ) | |||
( boot ) | |||
DI, | |||
(im1) | |||
( enable the ON key interrupt ) | |||
0x03 ( PORT_INT_MASK ) INAn, | |||
0x00 ( INT_MASK_ON ) A SETbr, | |||
0x03 ( PORT_INT_MASK ) OUTnA, | |||
A 0x80 LDrn, | |||
0x07 ( PORT_BANKB ) OUTnA, | |||
EI, | |||
( LCD off ) | |||
A 0x02 ( LCD_CMD_DISABLE ) LDrn, | |||
0x10 ( LCD_PORT_CMD ) OUTnA, | |||
HALT, | |||
0x95 ZFILL, ( 0x100 ) | |||
( All set, carry on! ) | |||
CURRENT @ XCURRENT ! | |||