From 59d8f215d7319e6a537169be617f6b3fb8df9e65 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 12 Feb 2021 18:07:13 +0100 Subject: [PATCH] erase status after reading error code --- Makefile | 1 + src/dos_m65/,aliases_dos.s | 1 + src/dos_m65/{ => assets}/dos_error_strings.s | 0 src/dos_m65/{ => assets}/dos_magicstr.s | 0 src/dos_m65/dos_acptr.s | 9 +- src/dos_m65/dos_error.s | 91 ++++++++++++++++++++ 6 files changed, 95 insertions(+), 7 deletions(-) rename src/dos_m65/{ => assets}/dos_error_strings.s (100%) rename src/dos_m65/{ => assets}/dos_magicstr.s (100%) create mode 100644 src/dos_m65/dos_error.s diff --git a/Makefile b/Makefile index 39316abc..07d5800e 100644 --- a/Makefile +++ b/Makefile @@ -62,6 +62,7 @@ SRCDIR_KERNAL = $(SRCDIR_COMMON) \ SRCDIR_DOS_M65 = $(SRCDIR_COMMON) \ src/dos_m65 \ + src/dos_m65/assets \ src/dos_m65/dev_floppy \ src/dos_m65/dev_ramdisk \ src/dos_m65/dev_sdcard diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index ec0002ae..657300b4 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -38,6 +38,7 @@ !addr FD_STATUS_IDX = $806E ; - floppy !addr RD_STATUS_IDX = $806F ; - ram disk + !addr XX_STATUS_STR = $8070 !addr SD_STATUS_STR = $8070 ; status string for SD card, terminated by 0 !addr FD_STATUS_STR = $80A0 ; status string for floppy drive, terminated by 0 !addr RD_STATUS_STR = $80D0 ; status string for ram disk, terminated by 0 diff --git a/src/dos_m65/dos_error_strings.s b/src/dos_m65/assets/dos_error_strings.s similarity index 100% rename from src/dos_m65/dos_error_strings.s rename to src/dos_m65/assets/dos_error_strings.s diff --git a/src/dos_m65/dos_magicstr.s b/src/dos_m65/assets/dos_magicstr.s similarity index 100% rename from src/dos_m65/dos_magicstr.s rename to src/dos_m65/assets/dos_magicstr.s diff --git a/src/dos_m65/dos_acptr.s b/src/dos_m65/dos_acptr.s index f5a0a630..50582e1b 100644 --- a/src/dos_m65/dos_acptr.s +++ b/src/dos_m65/dos_acptr.s @@ -24,8 +24,6 @@ dos_ACPTR_status: sta TBTCNT ; byte return beq dos_ACPTR_reset_status - ; XXX - clc rts @@ -38,11 +36,8 @@ dos_ACPTR_fail: dos_ACPTR_reset_status: - ; XXX replace status with OK instead - - ldx IDX1_TALKER - lda #$00 - sta XX_STATUS_IDX,x + lda IDX1_TALKER + jsr dos_status_00 ; FALLTROUGH diff --git a/src/dos_m65/dos_error.s b/src/dos_m65/dos_error.s new file mode 100644 index 00000000..490270c5 --- /dev/null +++ b/src/dos_m65/dos_error.s @@ -0,0 +1,91 @@ + +; +; Set current error or status +; + + +; XXX add methods for remaining codes +; XXX size-optimize this, move some parts into subroutines + + +; .A = 0 for SD card, 1 for FDD, 2 for RAM disk + +dos_status_00: ; OK + + pha + phx + phy + + ; Set status byte pointer to the beginning + + tax + lda #$00 + sta XX_STATUS_IDX, x + + ; Set .X to offset from XX_STATUS_STR + + lda dos_status_offset, x + tax + + ; Store '00,' + + lda #'0' + sta XX_STATUS_STR, x + inx + sta XX_STATUS_STR, x + inx + lda #',' + sta XX_STATUS_STR, x + inx + + ; Store 'OK' + + dex + ldy #$FF +@1: + inx + iny + lda dos_err_00, y + beq @2 + sta XX_STATUS_STR, x + bra @1 +@2: + ; Store ',00,00' + + lda #',' + sta XX_STATUS_STR, x + inx + lda #'0' + sta XX_STATUS_STR, x + inx + sta XX_STATUS_STR, x + inx + lda #',' + sta XX_STATUS_STR, x + inx + lda #'0' + sta XX_STATUS_STR, x + inx + sta XX_STATUS_STR, x + inx + + ; Store 0 (mark end of the status) + + lda #$00 + sta XX_STATUS_STR, x + + ; End + + ply + plx + pla + + clc ; mark status as OK + rts + + + + +dos_status_offset: + + !byte $00,$20,$40