1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-23 23:48:05 +11:00

zasm: change ioRewind to ioSeek

Will need it soon.
This commit is contained in:
Virgil Dupras 2019-05-15 13:41:56 -04:00
parent 33a1ee250d
commit fa28d64278
4 changed files with 20 additions and 8 deletions

View File

@ -22,8 +22,7 @@ ioPutC:
ld ix, (IO_OUT_PUTC) ld ix, (IO_OUT_PUTC)
jp (ix) jp (ix)
ioRewind: ioSeek:
ld hl, 0
ld ix, (IO_IN_SEEK) ld ix, (IO_IN_SEEK)
jp (ix) jp (ix)

View File

@ -75,7 +75,8 @@ zasmMain:
call zasmParseFile call zasmParseFile
ret nz ret nz
; Second pass ; Second pass
call ioRewind ld hl, 0
call ioSeek
xor a xor a
ld (ZASM_FIRST_PASS), a ld (ZASM_FIRST_PASS), a
call zasmParseFile call zasmParseFile

View File

@ -27,7 +27,7 @@
// in sync with zasm_glue.asm // in sync with zasm_glue.asm
#define USER_CODE 0x4800 #define USER_CODE 0x4800
#define STDIO_PORT 0x00 #define STDIO_PORT 0x00
#define STDIN_REWIND 0x01 #define STDIN_SEEK 0x01
// Other consts // Other consts
#define STDIN_BUFSIZE 0x8000 #define STDIN_BUFSIZE 0x8000
@ -41,6 +41,7 @@ static uint8_t mem[0x10000];
static uint8_t inpt[STDIN_BUFSIZE]; static uint8_t inpt[STDIN_BUFSIZE];
static int inpt_size; static int inpt_size;
static int inpt_ptr; static int inpt_ptr;
static uint8_t received_first_seek_byte = 0;
static uint8_t io_read(int unused, uint16_t addr) static uint8_t io_read(int unused, uint16_t addr)
{ {
@ -65,8 +66,14 @@ static void io_write(int unused, uint16_t addr, uint8_t val)
#ifndef MEMDUMP #ifndef MEMDUMP
putchar(val); putchar(val);
#endif #endif
} else if (addr == STDIN_REWIND) { } else if (addr == STDIN_SEEK) {
inpt_ptr = 0; if (received_first_seek_byte) {
inpt_ptr |= val;
received_first_seek_byte = 0;
} else {
inpt_ptr = (val << 8) & 0xff00;
received_first_seek_byte = 1;
}
} else { } else {
fprintf(stderr, "Out of bounds I/O write: %d / %d\n", addr, val); fprintf(stderr, "Out of bounds I/O write: %d / %d\n", addr, val);
} }

View File

@ -2,7 +2,7 @@
.equ RAMSTART 0x4000 .equ RAMSTART 0x4000
.equ USER_CODE 0x4800 .equ USER_CODE 0x4800
.equ STDIO_PORT 0x00 .equ STDIO_PORT 0x00
.equ STDIN_REWIND 0x01 .equ STDIN_SEEK 0x01
jr init ; 2 bytes jr init ; 2 bytes
; *** JUMP TABLE *** ; *** JUMP TABLE ***
@ -43,7 +43,12 @@ emulPutC:
ret ret
emulSeek: emulSeek:
out (STDIN_REWIND), a ; the STDIN_SEEK port works by poking it twice. First poke is for high
; byte, second poke is for low one.
ld a, h
out (STDIN_SEEK), a
ld a, l
out (STDIN_SEEK), a
ret ret
#include "core.asm" #include "core.asm"