Mirror of CollapseOS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
1.9KB

  1. .equ RAMSTART 0x8000
  2. .equ RAMEND 0xbfff
  3. .equ PORT_INT_MASK 0x03
  4. .equ INT_MASK_ON 0x00
  5. .equ PORT_INT_TRIG 0x04
  6. .equ INT_TRIG_ON 0x00
  7. .equ PORT_BANKB 0x07
  8. jp boot
  9. .fill 0x18-$
  10. jp boot ; reboot
  11. .fill 0x38-$
  12. jp handleInterrupt
  13. .fill 0x53-$
  14. jp boot
  15. ; 0x0056
  16. .db 0xFF, 0xA5, 0xFF
  17. .fill 0x64-$
  18. .inc "err.h"
  19. .inc "ascii.h"
  20. .inc "core.asm"
  21. .inc "str.asm"
  22. .equ FNT_WIDTH 3
  23. .equ FNT_HEIGHT 5
  24. .inc "fnt/mgm.asm"
  25. .equ LCD_RAMSTART RAMSTART
  26. .inc "ti/lcd.asm"
  27. .equ KBD_RAMSTART LCD_RAMEND
  28. .inc "ti/kbd.asm"
  29. .equ STDIO_RAMSTART KBD_RAMEND
  30. .equ STDIO_GETC kbdGetC
  31. .equ STDIO_PUTC lcdPutC
  32. .inc "stdio.asm"
  33. ; *** BASIC ***
  34. ; RAM space used in different routines for short term processing.
  35. .equ SCRATCHPAD_SIZE STDIO_BUFSIZE
  36. .equ SCRATCHPAD STDIO_RAMEND
  37. .inc "lib/util.asm"
  38. .inc "lib/ari.asm"
  39. .inc "lib/parse.asm"
  40. .inc "lib/fmt.asm"
  41. .equ EXPR_PARSE parseLiteralOrVar
  42. .inc "lib/expr.asm"
  43. .inc "basic/util.asm"
  44. .inc "basic/parse.asm"
  45. .inc "basic/tok.asm"
  46. .equ VAR_RAMSTART SCRATCHPAD+SCRATCHPAD_SIZE
  47. .inc "basic/var.asm"
  48. .equ BUF_RAMSTART VAR_RAMEND
  49. .inc "basic/buf.asm"
  50. .equ BAS_RAMSTART BUF_RAMEND
  51. .inc "basic/main.asm"
  52. .out BAS_RAMEND
  53. boot:
  54. di
  55. ld sp, RAMEND
  56. im 1
  57. ; enable ON key interrupt
  58. in a, (PORT_INT_MASK)
  59. set INT_MASK_ON, a
  60. out (PORT_INT_MASK), a
  61. ld a, 0x80
  62. out (PORT_BANKB), a
  63. ei
  64. call lcdOff
  65. ; sleep until we press ON
  66. halt
  67. main:
  68. ; Fun fact: if I place this line just above basStart like I would
  69. ; normally do, my TI-84+ refuses to validate the binary. But placed
  70. ; here, validation works fine.
  71. call basInit
  72. call kbdInit
  73. call lcdInit
  74. xor a
  75. call lcdSetCol
  76. jp basStart
  77. handleInterrupt:
  78. di
  79. push af
  80. ; did we push the ON button?
  81. in a, (PORT_INT_TRIG)
  82. bit INT_TRIG_ON, a
  83. jp z, .done ; no? we're done
  84. ; yes? acknowledge and boot
  85. in a, (PORT_INT_MASK)
  86. res INT_MASK_ON, a ; acknowledge interrupt
  87. out (PORT_INT_MASK), a
  88. pop af
  89. ei
  90. jp main
  91. .done:
  92. pop af
  93. ei
  94. reti
  95. FNT_DATA:
  96. .bin "fnt/3x5.bin"