mirror of
https://github.com/a2stuff/IIcSystemClock.git
synced 2025-01-29 14:30:33 +00:00
disasm wip
This commit is contained in:
parent
beb71633b7
commit
3d0b4f7e0e
@ -31,10 +31,18 @@ has_80col := $09 ; 1 = has 80 column card
|
|||||||
month := $0A ; month from current date
|
month := $0A ; month from current date
|
||||||
msg_num := $0B ; stashed message number
|
msg_num := $0B ; stashed message number
|
||||||
|
|
||||||
|
digits_buffer := $200 ; temporary usage during clock read
|
||||||
|
|
||||||
PRODOS_SYS_START := $2000
|
PRODOS_SYS_START := $2000
|
||||||
|
|
||||||
SLOT3_FIRMWARE := $C300
|
SLOT3_FIRMWARE := $C300
|
||||||
|
|
||||||
|
;;; SSC in Slot 1
|
||||||
|
PORT1_ACIA_STATUS := $C099
|
||||||
|
PORT1_ACIA_COMMAND := $C09A
|
||||||
|
PORT1_ACIA_CONTROL := $C09B
|
||||||
|
|
||||||
|
;;; SSC in Slot 2
|
||||||
PORT2_ACIA_STATUS := $C0A9
|
PORT2_ACIA_STATUS := $C0A9
|
||||||
PORT2_ACIA_COMMAND := $C0AA
|
PORT2_ACIA_COMMAND := $C0AA
|
||||||
PORT2_ACIA_CONTROL := $C0AB
|
PORT2_ACIA_CONTROL := $C0AB
|
||||||
@ -264,14 +272,15 @@ tries: .byte 0
|
|||||||
|
|
||||||
L2110: .byte 0
|
L2110: .byte 0
|
||||||
|
|
||||||
L2111: lda mach_type
|
.proc L2111
|
||||||
bne L2135 ; not IIc
|
lda mach_type
|
||||||
|
bne skip ; not IIc
|
||||||
lda L2110
|
lda L2110
|
||||||
bne L2135
|
bne skip
|
||||||
inc L2110
|
inc L2110
|
||||||
ldy #$99
|
ldy #<PORT1_ACIA_STATUS
|
||||||
sty acia_status_patch1
|
sty acia_status_patch1
|
||||||
iny
|
iny ; <PORT1_ACIA_COMMAND
|
||||||
sty acia_command_patch1
|
sty acia_command_patch1
|
||||||
sty acia_command_patch2
|
sty acia_command_patch2
|
||||||
lda L11FE
|
lda L11FE
|
||||||
@ -280,7 +289,7 @@ L2111: lda mach_type
|
|||||||
sty acia_command_patch3
|
sty acia_command_patch3
|
||||||
bne L20FE
|
bne L20FE
|
||||||
|
|
||||||
L2135: ldy #MessageCode::kNoClock
|
skip: ldy #MessageCode::kNoClock
|
||||||
sty msg_num
|
sty msg_num
|
||||||
lda MACHID ; Check for clock card
|
lda MACHID ; Check for clock card
|
||||||
ror a
|
ror a
|
||||||
@ -296,6 +305,7 @@ no_clock:
|
|||||||
sta TIMELO
|
sta TIMELO
|
||||||
sta TIMELO+1
|
sta TIMELO+1
|
||||||
jmp ShowMessageAndMaybeChain
|
jmp ShowMessageAndMaybeChain
|
||||||
|
.endproc
|
||||||
|
|
||||||
;; --------------------------------------------------
|
;; --------------------------------------------------
|
||||||
|
|
||||||
@ -551,27 +561,36 @@ acia_command_patch3 := * + 1
|
|||||||
;; ...Patch applied to here.
|
;; ...Patch applied to here.
|
||||||
;; --------------------------------------------------
|
;; --------------------------------------------------
|
||||||
|
|
||||||
;; Process digits
|
;; digits_buffer $200...$207 now has "MMDDhhmm", each digit as a byte
|
||||||
ldx #6
|
|
||||||
L22A3: lda $0201,x
|
|
||||||
|
|
||||||
: dec $0200,x ;
|
;; --------------------------------------------------
|
||||||
|
;; Process fields (two digits/bytes at a time)
|
||||||
|
|
||||||
|
ldx #6
|
||||||
|
digit_loop:
|
||||||
|
lda digits_buffer+1,x ; ones place
|
||||||
|
|
||||||
|
: dec digits_buffer,x ; tens place
|
||||||
bmi :+
|
bmi :+
|
||||||
clc
|
clc
|
||||||
adc #10
|
adc #10
|
||||||
bcc :-
|
bcc :-
|
||||||
:
|
:
|
||||||
|
;; A now holds binary value
|
||||||
|
|
||||||
offset_table_addr := * + 1
|
offset_table_addr := * + 1
|
||||||
ldy time_offset_table,x ; Offset table
|
ldy time_offset_table,x ; Offset table
|
||||||
sta DEVNUM,y ; y is offset from DEVNUM for some reason
|
sta DEVNUM,y ; y is offset from DEVNUM for some reason
|
||||||
dex
|
dex
|
||||||
dex
|
dex
|
||||||
bne L22A3
|
bne digit_loop
|
||||||
|
|
||||||
|
;; Now TIMELO holds minutes, TIMEHI has hours,
|
||||||
|
;; DATELO has days. Months has not been processed.
|
||||||
|
|
||||||
;; --------------------------------------------------
|
;; --------------------------------------------------
|
||||||
;; Assign month in DATELO/DATEHI
|
;; Assign month in DATELO/DATEHI
|
||||||
L22BA: lda $0200 ; top nibble is month
|
L22BA: lda digits_buffer ; top nibble is month???
|
||||||
asl a ; DATELO = mmmddddd
|
asl a ; DATELO = mmmddddd
|
||||||
and #%11100000
|
and #%11100000
|
||||||
ora DATELO
|
ora DATELO
|
||||||
@ -584,22 +603,34 @@ L22BA: lda $0200 ; top nibble is month
|
|||||||
;; --------------------------------------------------
|
;; --------------------------------------------------
|
||||||
|
|
||||||
ldy #$01
|
ldy #$01
|
||||||
L22CE: lda $0208,y
|
: lda $0208,y
|
||||||
ora #$B0
|
ora #$B0
|
||||||
sta $020F,y
|
sta $020F,y
|
||||||
dey
|
dey
|
||||||
bpl L22CE
|
bpl :-
|
||||||
|
|
||||||
dex
|
dex
|
||||||
bne L22BA
|
bne L22BA
|
||||||
plp
|
|
||||||
|
;; --------------------------------------------------
|
||||||
|
;; Exit driver
|
||||||
|
plp ; restore interrupt state
|
||||||
|
|
||||||
|
;; HACK: This RTS=$60 doubles as the first real entry in the
|
||||||
|
;; offset table.
|
||||||
|
.assert OPC_RTS = DATELO - DEVNUM, error, "Offset mismatch"
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
;; Offset from MMDDhhmm digits to DATE/TIME fields in
|
||||||
|
;; ProDOS global page. Only the even entries are used
|
||||||
|
;; and months get special handling.
|
||||||
|
|
||||||
time_offset_table := * - 3
|
time_offset_table := * - 3
|
||||||
|
|
||||||
.byte $FF ; dummy
|
.byte $FF ; dummy
|
||||||
.byte TIMELO+1 - DEVNUM ; offset
|
.byte TIMELO+1 - DEVNUM ; offset to hours field
|
||||||
.byte $FF ; dummy
|
.byte $FF ; dummy
|
||||||
.byte TIMELO - DEVNUM ; offset
|
.byte TIMELO - DEVNUM ; offset to minutes field
|
||||||
|
|
||||||
;; End of relocated clock driver
|
;; End of relocated clock driver
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user