LF only, more FS fixes
This commit is contained in:
1 parent
566db4a550
commit
a0cabac399
14 files changed
+113
-68
No files matched your search
+9
-8
@@ -1,21 +1,22 @@
|
|||||||
#ifndef FILE_H
|
#ifndef FILE_H
|
||||||
#define FILE_H
|
#define FILE_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#define STATUS_ERROR 1
|
#define STATUS_ERROR 1
|
||||||
#define STATUS_EOF 2
|
#define STATUS_EOF 2
|
||||||
#define STATUS_READY 4
|
#define STATUS_READY 4
|
||||||
|
|
||||||
#define COMMAND_OPEN 1
|
#define COMMAND_OPEN_R 1
|
||||||
#define COMMAND_CLOSE 2
|
#define COMMAND_OPEN_W 2
|
||||||
#define COMMAND_SELECT_IN 3
|
#define COMMAND_OPEN_A 3
|
||||||
#define COMMAND_SELECT_OUT 4
|
#define COMMAND_CLOSE 4
|
||||||
#define COMMAND_READ 5
|
#define COMMAND_READ 5
|
||||||
#define COMMAND_WRITE 6
|
#define COMMAND_WRITE 6
|
||||||
#define COMMAND_RESET 7
|
|
||||||
|
|
||||||
int openFile(int fd, const char *path);
|
int openFile(int fd, const char *path, const char *mode);
|
||||||
int closeFile(int fd);
|
int closeFile(int fd);
|
||||||
int readByte(const int fd, int *data);
|
int readByte(const int fd, uint8_t *data);
|
||||||
int writeByte(const int fd, const int data);
|
int writeByte(const int fd, const uint8_t data);
|
||||||
|
|
||||||
#endif // FILE_H
|
#endif // FILE_H
|
||||||
+4
-6
@@ -15,13 +15,12 @@ IO_FILE_DATA := $BC05
|
|||||||
IO_FILE_STATUS := $BC07
|
IO_FILE_STATUS := $BC07
|
||||||
|
|
||||||
; io commands
|
; io commands
|
||||||
IO_COMMAND_OPEN := 1
|
IO_COMMAND_OPEN_R := 1
|
||||||
IO_COMMAND_CLOSE := 2
|
IO_COMMAND_OPEN_W := 2
|
||||||
IO_COMMAND_SELECT_IN := 3
|
IO_COMMAND_OPEN_A := 3
|
||||||
IO_COMMAND_SELECT_OUT := 4
|
IO_COMMAND_CLOSE := 4
|
||||||
IO_COMMAND_READ := 5
|
IO_COMMAND_READ := 5
|
||||||
IO_COMMAND_WRITE := 6
|
IO_COMMAND_WRITE := 6
|
||||||
IO_COMMAND_RESET := 7
|
|
||||||
|
|
||||||
; io status
|
; io status
|
||||||
FILE_STATUS_ERROR := $01
|
FILE_STATUS_ERROR := $01
|
||||||
@@ -41,5 +40,4 @@ STACK2 := STACK
|
|||||||
|
|
||||||
|
|
||||||
MAX_EXPON = 10
|
MAX_EXPON = 10
|
||||||
CR = 13
|
|
||||||
LF = 10
|
LF = 10
|
||||||
+39
-11
@@ -5,22 +5,16 @@
|
|||||||
CHKIN:
|
CHKIN:
|
||||||
stx CURDVC
|
stx CURDVC
|
||||||
stx IO_FILE_DESCRIPTOR
|
stx IO_FILE_DESCRIPTOR
|
||||||
lda IO_COMMAND_SELECT_IN
|
|
||||||
sta IO_FILE_COMMAND
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
CHKOUT:
|
CHKOUT:
|
||||||
stx CURDVC
|
stx CURDVC
|
||||||
stx IO_FILE_DESCRIPTOR
|
stx IO_FILE_DESCRIPTOR
|
||||||
lda IO_COMMAND_SELECT_OUT
|
|
||||||
sta IO_FILE_COMMAND
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
CLRCH:
|
CLRCH:
|
||||||
lda #0
|
lda #0
|
||||||
sta CURDVC
|
sta CURDVC
|
||||||
lda IO_COMMAND_RESET
|
|
||||||
sta IO_FILE_COMMAND
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
CHRIN:
|
CHRIN:
|
||||||
@@ -31,12 +25,19 @@ CHRIN:
|
|||||||
jsr CHROUT ; echo
|
jsr CHROUT ; echo
|
||||||
rts
|
rts
|
||||||
@file:
|
@file:
|
||||||
lda IO_COMMAND_READ
|
lda CURDVC
|
||||||
|
sta IO_FILE_DESCRIPTOR
|
||||||
|
lda #IO_COMMAND_READ
|
||||||
sta IO_FILE_COMMAND
|
sta IO_FILE_COMMAND
|
||||||
@wait:
|
@wait:
|
||||||
lda IO_FILE_STATUS
|
lda IO_FILE_STATUS
|
||||||
and #FILE_STATUS_READY
|
and #FILE_STATUS_READY
|
||||||
beq @wait
|
beq @wait
|
||||||
|
lda IO_FILE_STATUS
|
||||||
|
and #FILE_STATUS_ERROR
|
||||||
|
beq :+
|
||||||
|
jmp IQERR
|
||||||
|
:
|
||||||
lda IO_FILE_DATA
|
lda IO_FILE_DATA
|
||||||
@end:
|
@end:
|
||||||
rts
|
rts
|
||||||
@@ -49,14 +50,21 @@ CHROUT:
|
|||||||
sta IO_SCREEN
|
sta IO_SCREEN
|
||||||
rts
|
rts
|
||||||
@file:
|
@file:
|
||||||
|
lda CURDVC
|
||||||
|
sta IO_FILE_DESCRIPTOR
|
||||||
pla
|
pla
|
||||||
sta IO_FILE_DATA
|
sta IO_FILE_DATA
|
||||||
lda IO_COMMAND_WRITE
|
lda #IO_COMMAND_WRITE
|
||||||
sta IO_FILE_COMMAND
|
sta IO_FILE_COMMAND
|
||||||
@wait:
|
@wait:
|
||||||
lda IO_FILE_STATUS
|
lda IO_FILE_STATUS
|
||||||
and #$4
|
and #FILE_STATUS_READY
|
||||||
beq @wait
|
beq @wait
|
||||||
|
lda IO_FILE_STATUS
|
||||||
|
and #FILE_STATUS_ERROR
|
||||||
|
beq :+
|
||||||
|
jmp IQERR
|
||||||
|
:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
OPEN:
|
OPEN:
|
||||||
@@ -82,8 +90,28 @@ OPEN:
|
|||||||
sta IO_FILE_DATA
|
sta IO_FILE_DATA
|
||||||
lda #>FILE_NAME_BUFFER
|
lda #>FILE_NAME_BUFFER
|
||||||
sta IO_FILE_DATA+1
|
sta IO_FILE_DATA+1
|
||||||
lda #IO_COMMAND_OPEN
|
jsr CHKCOM
|
||||||
sta IO_FILE_COMMAND
|
jsr FRMEVL
|
||||||
|
jsr CHKSTR
|
||||||
|
jsr FREFAC
|
||||||
|
cmp #1
|
||||||
|
beq :+
|
||||||
|
jmp SYNERR
|
||||||
|
:
|
||||||
|
ldy #0
|
||||||
|
lda (INDEX),y
|
||||||
|
ldy #IO_COMMAND_OPEN_R
|
||||||
|
cmp #'R'
|
||||||
|
beq @setCommand
|
||||||
|
ldy #IO_COMMAND_OPEN_W
|
||||||
|
cmp #'W'
|
||||||
|
beq @setCommand
|
||||||
|
ldy #IO_COMMAND_OPEN_A
|
||||||
|
cmp #'A'
|
||||||
|
beq @setCommand
|
||||||
|
jmp SYNERR
|
||||||
|
@setCommand:
|
||||||
|
sty IO_FILE_COMMAND
|
||||||
@wait:
|
@wait:
|
||||||
lda IO_FILE_STATUS
|
lda IO_FILE_STATUS
|
||||||
and #FILE_STATUS_READY
|
and #FILE_STATUS_READY
|
||||||
|
|||||||
+2
-2
@@ -43,7 +43,7 @@ EASTER_EGG:
|
|||||||
lda #$80
|
lda #$80
|
||||||
sta LINNUM+1
|
sta LINNUM+1
|
||||||
LD758:
|
LD758:
|
||||||
ldx #$0A
|
ldx #LF
|
||||||
LD75A:
|
LD75A:
|
||||||
lda MICROSOFT-1,x
|
lda MICROSOFT-1,x
|
||||||
jsr MONCOUT
|
jsr MONCOUT
|
||||||
@@ -1441,7 +1441,7 @@ POLY_EXP:
|
|||||||
.byte $71,$34,$58,$3E,$56
|
.byte $71,$34,$58,$3E,$56
|
||||||
.byte $74,$16,$7E,$B3,$1B
|
.byte $74,$16,$7E,$B3,$1B
|
||||||
.byte $77,$2F,$EE,$E3,$85
|
.byte $77,$2F,$EE,$E3,$85
|
||||||
.byte $7A,$1D,$84,$1C,$2A
|
.byte $7A,$1D,$84,$1C,$2A
|
||||||
.byte $7C,$63,$59,$58,$0A
|
.byte $7C,$63,$59,$58,$0A
|
||||||
.byte $7E,$75,$FD,$E7,$C6
|
.byte $7E,$75,$FD,$E7,$C6
|
||||||
.byte $80,$31,$72,$18,$10
|
.byte $80,$31,$72,$18,$10
|
||||||
|
|||||||
+7
-7
@@ -73,7 +73,7 @@ L4098:
|
|||||||
sta Z14
|
sta Z14
|
||||||
lda #$03
|
lda #$03
|
||||||
sta DSCLEN
|
sta DSCLEN
|
||||||
jsr CRDO
|
jsr LFDO
|
||||||
lda #$01
|
lda #$01
|
||||||
sta INPUTBUFFER-3
|
sta INPUTBUFFER-3
|
||||||
sta INPUTBUFFER-4
|
sta INPUTBUFFER-4
|
||||||
@@ -130,7 +130,7 @@ L4192:
|
|||||||
lda TXTTAB
|
lda TXTTAB
|
||||||
ldy TXTTAB+1
|
ldy TXTTAB+1
|
||||||
jsr REASON
|
jsr REASON
|
||||||
jsr CRDO
|
jsr LFDO
|
||||||
lda MEMSIZ
|
lda MEMSIZ
|
||||||
sec
|
sec
|
||||||
sbc TXTTAB
|
sbc TXTTAB
|
||||||
@@ -156,18 +156,18 @@ L4192:
|
|||||||
jmp (GORESTART+1)
|
jmp (GORESTART+1)
|
||||||
|
|
||||||
QT_WRITTEN_BY:
|
QT_WRITTEN_BY:
|
||||||
.byte CR,LF
|
.byte LF
|
||||||
.byte "WRITTEN BY WEILAND & GATES"
|
.byte "WRITTEN BY WEILAND & GATES"
|
||||||
.byte CR,LF
|
.byte LF
|
||||||
.byte "PORTED BY KILIAN KURT HOFMANN"
|
.byte "PORTED BY KILIAN KURT HOFMANN"
|
||||||
.byte CR,LF,0
|
.byte LF,0
|
||||||
QT_TERMINAL_WIDTH:
|
QT_TERMINAL_WIDTH:
|
||||||
.byte "TERMINAL "
|
.byte "TERMINAL "
|
||||||
.byte "WIDTH"
|
.byte "WIDTH"
|
||||||
.byte 0
|
.byte 0
|
||||||
QT_BYTES_FREE:
|
QT_BYTES_FREE:
|
||||||
.byte " BYTES FREE"
|
.byte " BYTES FREE"
|
||||||
.byte CR,LF,0
|
.byte LF,0
|
||||||
QT_BASIC:
|
QT_BASIC:
|
||||||
.byte "COPYRIGHT 1977 BY MICROSOFT CO."
|
.byte "COPYRIGHT 1977 BY MICROSOFT CO."
|
||||||
.byte CR,LF,CR,LF,0
|
.byte LF,LF,0
|
||||||
+2
-2
@@ -4,7 +4,7 @@ L2420:
|
|||||||
dex
|
dex
|
||||||
bpl INLIN2
|
bpl INLIN2
|
||||||
L2423:
|
L2423:
|
||||||
jsr CRDO
|
jsr LFDO
|
||||||
|
|
||||||
; ----------------------------------------------------------------------------
|
; ----------------------------------------------------------------------------
|
||||||
; READ A LINE, AND STRIP OFF SIGN BITS
|
; READ A LINE, AND STRIP OFF SIGN BITS
|
||||||
@@ -15,7 +15,7 @@ INLIN2:
|
|||||||
jsr GETLN
|
jsr GETLN
|
||||||
cmp #$07
|
cmp #$07
|
||||||
beq L2443
|
beq L2443
|
||||||
cmp #$0D
|
cmp #LF
|
||||||
beq L2453
|
beq L2453
|
||||||
cmp #$20
|
cmp #$20
|
||||||
bcc INLIN2
|
bcc INLIN2
|
||||||
|
|||||||
+2
-2
@@ -295,7 +295,7 @@ L2BA1:
|
|||||||
; ----------------------------------------------------------------------------
|
; ----------------------------------------------------------------------------
|
||||||
ERREXTRA:
|
ERREXTRA:
|
||||||
.byte "?EXTRA IGNORED"
|
.byte "?EXTRA IGNORED"
|
||||||
.byte $0D,$0A,$00
|
.byte LF,$00
|
||||||
ERRREENTRY:
|
ERRREENTRY:
|
||||||
.byte "?REDO FROM START"
|
.byte "?REDO FROM START"
|
||||||
.byte $0D,$0A,$00
|
.byte LF,$00
|
||||||
+2
-2
@@ -9,8 +9,8 @@ QT_IN:
|
|||||||
.byte " IN "
|
.byte " IN "
|
||||||
.byte $00
|
.byte $00
|
||||||
QT_OK:
|
QT_OK:
|
||||||
.byte CR,LF,"OK",CR,LF
|
.byte LF,"OK",LF
|
||||||
.byte 0
|
.byte 0
|
||||||
QT_BREAK:
|
QT_BREAK:
|
||||||
.byte CR,LF,"BREAK"
|
.byte LF,"BREAK"
|
||||||
.byte 0
|
.byte 0
|
||||||
+6
-9
@@ -9,7 +9,7 @@ L297E:
|
|||||||
; "PRINT" STATEMENT
|
; "PRINT" STATEMENT
|
||||||
; ----------------------------------------------------------------------------
|
; ----------------------------------------------------------------------------
|
||||||
PRINT:
|
PRINT:
|
||||||
beq CRDO
|
beq LFDO
|
||||||
PRINT2:
|
PRINT2:
|
||||||
beq L29DD
|
beq L29DD
|
||||||
cmp #TOKEN_TAB
|
cmp #TOKEN_TAB
|
||||||
@@ -32,7 +32,7 @@ PRINT2:
|
|||||||
adc POSX
|
adc POSX
|
||||||
cmp Z17
|
cmp Z17
|
||||||
bcc L29B1
|
bcc L29B1
|
||||||
jsr CRDO
|
jsr LFDO
|
||||||
L29B1:
|
L29B1:
|
||||||
jsr STRPRT
|
jsr STRPRT
|
||||||
jsr OUTSP
|
jsr OUTSP
|
||||||
@@ -46,12 +46,9 @@ L29B9:
|
|||||||
lda CURDVC
|
lda CURDVC
|
||||||
bne L29DD
|
bne L29DD
|
||||||
|
|
||||||
CRDO:
|
LFDO:
|
||||||
lda #CR
|
|
||||||
sta POSX
|
|
||||||
jsr OUTDO
|
|
||||||
CRDO2:
|
|
||||||
lda #LF
|
lda #LF
|
||||||
|
sta POSX
|
||||||
jsr OUTDO
|
jsr OUTDO
|
||||||
|
|
||||||
PRINTNULLS:
|
PRINTNULLS:
|
||||||
@@ -62,7 +59,7 @@ L29DE:
|
|||||||
lda POSX
|
lda POSX
|
||||||
cmp Z18
|
cmp Z18
|
||||||
bcc L29EA
|
bcc L29EA
|
||||||
jsr CRDO
|
jsr LFDO
|
||||||
jmp L2A0D
|
jmp L2A0D
|
||||||
L29EA:
|
L29EA:
|
||||||
sec
|
sec
|
||||||
@@ -116,7 +113,7 @@ L2A22:
|
|||||||
lda (INDEX),y
|
lda (INDEX),y
|
||||||
jsr OUTDO
|
jsr OUTDO
|
||||||
iny
|
iny
|
||||||
cmp #$0D
|
cmp #LF
|
||||||
bne L2A22
|
bne L2A22
|
||||||
jsr PRINTNULLS
|
jsr PRINTNULLS
|
||||||
jmp L2A22
|
jmp L2A22
|
||||||
|
|||||||
+2
-2
@@ -26,7 +26,7 @@ ERROR:
|
|||||||
lda #$00
|
lda #$00
|
||||||
sta CURDVC
|
sta CURDVC
|
||||||
LC366:
|
LC366:
|
||||||
jsr CRDO
|
jsr LFDO
|
||||||
jsr OUTQUES
|
jsr OUTQUES
|
||||||
L2329:
|
L2329:
|
||||||
lda ERROR_MESSAGES,x
|
lda ERROR_MESSAGES,x
|
||||||
@@ -461,7 +461,7 @@ L25A6X:
|
|||||||
lda (LOWTRX),y
|
lda (LOWTRX),y
|
||||||
beq L25E5
|
beq L25E5
|
||||||
jsr ISCNTC
|
jsr ISCNTC
|
||||||
jsr CRDO
|
jsr LFDO
|
||||||
iny
|
iny
|
||||||
lda (LOWTRX),y
|
lda (LOWTRX),y
|
||||||
tax
|
tax
|
||||||
|
|||||||
+5
-5
@@ -12,7 +12,7 @@ IN = $0200 ; Input buffer
|
|||||||
RESET:
|
RESET:
|
||||||
LDA #$1B ; Begin with escape.
|
LDA #$1B ; Begin with escape.
|
||||||
|
|
||||||
NOTCR:
|
NOTLF:
|
||||||
CMP #$08 ; Backspace key?
|
CMP #$08 ; Backspace key?
|
||||||
BEQ BACKSPACE ; Yes.
|
BEQ BACKSPACE ; Yes.
|
||||||
CMP #$1B ; ESC?
|
CMP #$1B ; ESC?
|
||||||
@@ -37,8 +37,8 @@ NEXTCHAR:
|
|||||||
BMI NEXTCHAR ; Loop until ready.
|
BMI NEXTCHAR ; Loop until ready.
|
||||||
STA IN,Y ; Add to text buffer.
|
STA IN,Y ; Add to text buffer.
|
||||||
JSR ECHO ; Display character.
|
JSR ECHO ; Display character.
|
||||||
CMP #$0D ; CR?
|
CMP #LF ; LF?
|
||||||
BNE NOTCR ; No.
|
BNE NOTLF ; No.
|
||||||
|
|
||||||
LDY #$FF ; Reset text index.
|
LDY #$FF ; Reset text index.
|
||||||
LDA #$00 ; For XAM mode.
|
LDA #$00 ; For XAM mode.
|
||||||
@@ -52,7 +52,7 @@ BLSKIP:
|
|||||||
INY ; Advance text index.
|
INY ; Advance text index.
|
||||||
NEXTITEM:
|
NEXTITEM:
|
||||||
LDA IN,Y ; Get character.
|
LDA IN,Y ; Get character.
|
||||||
CMP #$0D ; CR?
|
CMP #LF ; LF?
|
||||||
BEQ GETLINE ; Yes, done this line.
|
BEQ GETLINE ; Yes, done this line.
|
||||||
CMP #$2E ; "."?
|
CMP #$2E ; "."?
|
||||||
BCC BLSKIP ; Skip delimiter.
|
BCC BLSKIP ; Skip delimiter.
|
||||||
@@ -118,7 +118,7 @@ SETADR: LDA L-1,X ; Copy hex data to
|
|||||||
|
|
||||||
NXTPRNT:
|
NXTPRNT:
|
||||||
BNE PRDATA ; NE means no address to print.
|
BNE PRDATA ; NE means no address to print.
|
||||||
LDA #$0A ; LF.
|
LDA #LF ; LF.
|
||||||
JSR ECHO ; Output it.
|
JSR ECHO ; Output it.
|
||||||
LDA XAMH ; 'Examine index' high-order byte.
|
LDA XAMH ; 'Examine index' high-order byte.
|
||||||
JSR PRBYTE ; Output it in hex format.
|
JSR PRBYTE ; Output it in hex format.
|
||||||
|
|||||||
+5
-5
@@ -6,12 +6,12 @@
|
|||||||
// Up to 256 files can be open
|
// Up to 256 files can be open
|
||||||
FILE *files[256];
|
FILE *files[256];
|
||||||
|
|
||||||
int openFile(int fd, const char *path) {
|
int openFile(int fd, const char *path, const char *mode) {
|
||||||
if (files[fd] != NULL) {
|
if (files[fd] != NULL) {
|
||||||
return STATUS_READY | STATUS_ERROR;
|
return STATUS_READY | STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
files[fd] = fopen(path, "w+");
|
files[fd] = fopen(path, mode);
|
||||||
if (files[fd] == NULL) {
|
if (files[fd] == NULL) {
|
||||||
return STATUS_READY | STATUS_ERROR;
|
return STATUS_READY | STATUS_ERROR;
|
||||||
}
|
}
|
||||||
@@ -36,9 +36,9 @@ int closeFile(int fd) {
|
|||||||
return STATUS_READY;
|
return STATUS_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
int readByte(const int fd, int *data) {
|
int readByte(const int fd, uint8_t *data) {
|
||||||
int status = 0;
|
int status = 0;
|
||||||
int count = fread(&data, 1, 1, files[fd]);
|
int count = fread(data, 1, 1, files[fd]);
|
||||||
// Error or EOF
|
// Error or EOF
|
||||||
if (count != 1) {
|
if (count != 1) {
|
||||||
int error = ferror(files[fd]);
|
int error = ferror(files[fd]);
|
||||||
@@ -53,7 +53,7 @@ int readByte(const int fd, int *data) {
|
|||||||
return STATUS_READY | status;
|
return STATUS_READY | status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int writeByte(const int fd, const int data) {
|
int writeByte(const int fd, const uint8_t data) {
|
||||||
int status = 0;
|
int status = 0;
|
||||||
int count = fwrite(&data, 1, 1, files[fd]);
|
int count = fwrite(&data, 1, 1, files[fd]);
|
||||||
// Error or EOF
|
// Error or EOF
|
||||||
|
|||||||
@@ -65,12 +65,28 @@ void writeMemory(uint16_t address, uint8_t value, uint8_t *ram) {
|
|||||||
|
|
||||||
case FILE_COMMAND: {
|
case FILE_COMMAND: {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case COMMAND_OPEN: {
|
case COMMAND_OPEN_R: {
|
||||||
ram[IO_BASE + FILE_STATUS] = 0;
|
ram[IO_BASE + FILE_STATUS] = 0;
|
||||||
|
|
||||||
uint16_t fileAddress = ram[IO_BASE + FILE_DATA] | ((uint16_t)ram[IO_BASE + FILE_DATA_HIGH] << 8);
|
uint16_t fileAddress = ram[IO_BASE + FILE_DATA] | ((uint16_t)ram[IO_BASE + FILE_DATA_HIGH] << 8);
|
||||||
|
|
||||||
ram[IO_BASE + FILE_STATUS] = openFile(ram[IO_BASE + FILE_DESCRIPTOR], (const char *)&ram[fileAddress]);
|
ram[IO_BASE + FILE_STATUS] = openFile(ram[IO_BASE + FILE_DESCRIPTOR], (const char *)&ram[fileAddress], "r");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case COMMAND_OPEN_W: {
|
||||||
|
ram[IO_BASE + FILE_STATUS] = 0;
|
||||||
|
|
||||||
|
uint16_t fileAddress = ram[IO_BASE + FILE_DATA] | ((uint16_t)ram[IO_BASE + FILE_DATA_HIGH] << 8);
|
||||||
|
|
||||||
|
ram[IO_BASE + FILE_STATUS] = openFile(ram[IO_BASE + FILE_DESCRIPTOR], (const char *)&ram[fileAddress], "w+");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case COMMAND_OPEN_A: {
|
||||||
|
ram[IO_BASE + FILE_STATUS] = 0;
|
||||||
|
|
||||||
|
uint16_t fileAddress = ram[IO_BASE + FILE_DATA] | ((uint16_t)ram[IO_BASE + FILE_DATA_HIGH] << 8);
|
||||||
|
|
||||||
|
ram[IO_BASE + FILE_STATUS] = openFile(ram[IO_BASE + FILE_DESCRIPTOR], (const char *)&ram[fileAddress], "a+");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case COMMAND_CLOSE: {
|
case COMMAND_CLOSE: {
|
||||||
@@ -78,6 +94,16 @@ void writeMemory(uint16_t address, uint8_t value, uint8_t *ram) {
|
|||||||
ram[IO_BASE + FILE_STATUS] = closeFile(ram[IO_BASE + FILE_DESCRIPTOR]);
|
ram[IO_BASE + FILE_STATUS] = closeFile(ram[IO_BASE + FILE_DESCRIPTOR]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case COMMAND_READ: {
|
||||||
|
ram[IO_BASE + FILE_STATUS] = 0;
|
||||||
|
ram[IO_BASE + FILE_STATUS] = readByte(ram[IO_BASE + FILE_DESCRIPTOR], &ram[IO_BASE + FILE_DATA]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case COMMAND_WRITE: {
|
||||||
|
ram[IO_BASE + FILE_STATUS] = 0;
|
||||||
|
ram[IO_BASE + FILE_STATUS] = writeByte(ram[IO_BASE + FILE_DESCRIPTOR], ram[IO_BASE + FILE_DATA]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -20,11 +20,6 @@ int getChar(void) {
|
|||||||
return 0xFF;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
// BASIC expects CR always
|
|
||||||
if (c == '\n') {
|
|
||||||
return '\r';
|
|
||||||
}
|
|
||||||
|
|
||||||
// BASIC is uppercase only
|
// BASIC is uppercase only
|
||||||
if (c >= 'a' && c <= 'z') {
|
if (c >= 'a' && c <= 'z') {
|
||||||
c = c - 'a' + 'A';
|
c = c - 'a' + 'A';
|
||||||
|
|||||||
Reference in new issue
Block a user