|
- .inc "blkdev.h"
- .inc "fs.h"
- .inc "err.h"
- .inc "ascii.h"
- .equ RAMSTART 0x2000
- .equ USER_CODE 0x4200
- .equ STDIO_PORT 0x00
- .equ FS_DATA_PORT 0x01
- .equ FS_ADDR_PORT 0x02
-
- jp init
-
- ; *** JUMP TABLE ***
- jp strncmp
- jp upcase
- jp findchar
- jp blkSelPtr
- jp blkSel
- jp blkSet
- jp blkSeek
- jp blkTell
- jp blkGetB
- jp blkPutB
- jp fsFindFN
- jp fsOpen
- jp fsGetB
- jp fsPutB
- jp fsSetSize
- jp fsOn
- jp fsIter
- jp fsAlloc
- jp fsDel
- jp fsHandle
- jp printstr
- jp printnstr
- jp _blkGetB
- jp _blkPutB
- jp _blkSeek
- jp _blkTell
- jp printcrlf
- jp stdioGetC
- jp stdioPutC
- jp stdioReadLine
-
- .inc "core.asm"
- .inc "str.asm"
-
- .equ BLOCKDEV_RAMSTART RAMSTART
- .equ BLOCKDEV_COUNT 4
- .inc "blockdev.asm"
- ; List of devices
- .dw fsdevGetB, fsdevPutB
- .dw stdoutGetB, stdoutPutB
- .dw stdinGetB, stdinPutB
- .dw mmapGetB, mmapPutB
-
-
- .equ MMAP_START 0xe000
- .inc "mmap.asm"
-
- .equ STDIO_RAMSTART BLOCKDEV_RAMEND
- .equ STDIO_GETC emulGetC
- .equ STDIO_PUTC emulPutC
- .inc "stdio.asm"
-
- .equ FS_RAMSTART STDIO_RAMEND
- .equ FS_HANDLE_COUNT 2
- .inc "fs.asm"
-
- ; *** BASIC ***
-
- ; RAM space used in different routines for short term processing.
- .equ SCRATCHPAD_SIZE STDIO_BUFSIZE
- .equ SCRATCHPAD FS_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 BFS_RAMSTART BUF_RAMEND
- .inc "basic/fs.asm"
- .inc "basic/blk.asm"
- .equ BAS_RAMSTART BFS_RAMEND
- .inc "basic/main.asm"
-
- init:
- di
- ; setup stack
- ld sp, 0xffff
- call fsInit
- ld a, 0 ; select fsdev
- ld de, BLOCKDEV_SEL
- call blkSel
- call fsOn
- call basInit
- ld hl, basFindCmdExtra
- ld (BAS_FINDHOOK), hl
- jp basStart
-
- basFindCmdExtra:
- ld hl, basFSCmds
- call basFindCmd
- ret z
- ld hl, basBLKCmds
- call basFindCmd
- ret z
- jp basPgmHook
-
- emulGetC:
- ; Blocks until a char is returned
- in a, (STDIO_PORT)
- cp a ; ensure Z
- ret
-
- emulPutC:
- out (STDIO_PORT), a
- ret
-
- fsdevGetB:
- ld a, e
- out (FS_ADDR_PORT), a
- ld a, h
- out (FS_ADDR_PORT), a
- ld a, l
- out (FS_ADDR_PORT), a
- in a, (FS_ADDR_PORT)
- or a
- ret nz
- in a, (FS_DATA_PORT)
- cp a ; ensure Z
- ret
-
- fsdevPutB:
- push af
- ld a, e
- out (FS_ADDR_PORT), a
- ld a, h
- out (FS_ADDR_PORT), a
- ld a, l
- out (FS_ADDR_PORT), a
- in a, (FS_ADDR_PORT)
- cp 2 ; only A > 1 means error
- jr nc, .error ; A >= 2
- pop af
- out (FS_DATA_PORT), a
- cp a ; ensure Z
- ret
- .error:
- pop af
- jp unsetZ ; returns
-
- .equ STDOUT_HANDLE FS_HANDLES
-
- stdoutGetB:
- ld ix, STDOUT_HANDLE
- jp fsGetB
-
- stdoutPutB:
- ld ix, STDOUT_HANDLE
- jp fsPutB
-
- .equ STDIN_HANDLE FS_HANDLES+FS_HANDLE_SIZE
-
- stdinGetB:
- ld ix, STDIN_HANDLE
- jp fsGetB
-
- stdinPutB:
- ld ix, STDIN_HANDLE
- jp fsPutB
|