implemented UDTIM routine

This commit is contained in:
FeralChild64 committed 2019-08-10 16:06:32 +02:00
1 parent 1053e13112
commit 676db127c3
3 files changed
+43 -11

No files matched your search

+1 -1
View File
@@ -106,7 +106,7 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on
| `$FFE1` | `STOP` | DONE | |
| `$FFE4` | `GETIN` | PARTIAL | only some devices supported |
| `$FFE7` | `CLALL` | DONE | |
| `$FFEA` | `UDTIM` | NOT DONE | checking for STOP key present in SCNKEY instead |
| `$FFEA` | `UDTIM` | DONE | |
| `$FFED` | `SCREEN` | DONE | |
| `$FFF0` | `PLOT` | NOT DONE | |
| `$FFF3` | `IOBASE` | DONE | |
-10
View File
@@ -204,10 +204,6 @@ ReturnNoKeys:
NoActivityDetected:
;; Cancel STKEY status
lda #$FF
sta STKEY ; XXX this variable should be set by UDTIM
;; So cancel all bucky keys
lda key_bucky_state
sta key_last_bucky_state
@@ -334,12 +330,6 @@ next_row:
;; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;; // Check and flag Non Alphanumeric Keys
;; Store last row of keyboard scan result,
;; so that RUN/STOP etc can be checked easily
;; (Compute's Mapping the 64, p27)
lda ScanResult+0
sta STKEY ; XXX this variable should be set by UDTIM
;; Store de-bounce data for bucky keys
;; (Compute's Mapping the 64, p58-59)
lda key_bucky_state
+42
View File
@@ -9,4 +9,46 @@
;;
udtim:
;; Update jiffy clock. The whole day is $4F1A00 jiffies (24 hours * 60 minutes * 60 seconds * 60 jiffies),
;; after this time we have to reset the clock.
inc TIME+0
bne udtim_clock_done
inc TIME+1
bne udtim_clock_rollover
inc TIME+2
;; FALLTROUGH
udtim_clock_done:
udtim_update_stkey: ; entry to be used when interrupts are disabled
;; Another action we have to perform is to copy the last row of keyboard to RAM,
;; so that various routines can detect the STOP key press
;; XXX scnkey contains similar sequence - deduplicate this!
lda #$FF
sta CIA1_DDRA ; output
lda #$00
sta CIA1_DDRB ; input
lda #$7F
sta CIA1_PRA ; select the last row (bit to 0)
lda CIA1_PRB ; read the row
sta STKEY
rts
udtim_clock_rollover:
;; At this point TIME+0 has to contain 0,
lda TIME+1
cmp #$1A
bne udtim_clock_done
lda TIME+2
cmp #$4F
bne udtim_clock_done
lda #$00
sta TIME+2
sta TIME+1
beq udtim_clock_done ; will always jump