mirror of
https://github.com/a2stuff/IIcSystemClock.git
synced 2024-06-07 12:29:29 +00:00
ZP vars
This commit is contained in:
parent
47915b4c82
commit
ffe1efb44b
213
clock.system.s
213
clock.system.s
|
@ -21,6 +21,12 @@
|
||||||
kRemoveWriteProtect = 11
|
kRemoveWriteProtect = 11
|
||||||
.endenum
|
.endenum
|
||||||
|
|
||||||
|
mach_type := $07 ; 0 = IIc, 1 = II+/IIe
|
||||||
|
case_mask := $08 ; mask with chars before COUT
|
||||||
|
has_80col := $09 ; 1 = has 80 column card
|
||||||
|
month := $0A ; month from current date
|
||||||
|
msg_num := $0B ; stashed message number
|
||||||
|
|
||||||
|
|
||||||
SLOT3_FIRMWARE := $C300
|
SLOT3_FIRMWARE := $C300
|
||||||
|
|
||||||
|
@ -69,33 +75,34 @@ L2013:
|
||||||
sta $03F4
|
sta $03F4
|
||||||
|
|
||||||
;; Identify machine type
|
;; Identify machine type
|
||||||
ldy #$00
|
ldy #0
|
||||||
ldx #$00
|
ldx #0
|
||||||
lda MACHID
|
lda MACHID
|
||||||
and #%10001000 ; IIe or later, modifier
|
and #%10001000 ; =0 if II+, >0 if IIe/IIc
|
||||||
beq L2035
|
beq :+
|
||||||
inx
|
inx ; Not a II+
|
||||||
L2035: cmp #%10001000 ; IIc ?
|
|
||||||
|
: cmp #%10001000 ; IIc ?
|
||||||
beq is_iic
|
beq is_iic
|
||||||
lda L2003
|
lda L2003 ; Hack ???
|
||||||
cmp #$CC
|
cmp #$CC
|
||||||
beq is_iic
|
beq is_iic
|
||||||
iny
|
iny ; Not a IIc
|
||||||
is_iic: sty $07
|
is_iic: sty mach_type
|
||||||
lda L239C,x
|
|
||||||
sta $08
|
|
||||||
|
|
||||||
|
;; Set case mask (II+ vs. IIe/IIc)
|
||||||
|
lda case_mask_table,x
|
||||||
|
sta case_mask
|
||||||
|
|
||||||
;; Check 40/80 columns; wrap strings if 40 columns.
|
;; Check 40/80 columns; wrap strings if 40 columns.
|
||||||
lda MACHID
|
lda MACHID
|
||||||
and #%00000010 ; 80 Column card?
|
and #%00000010 ; 80 Column card?
|
||||||
lsr a
|
lsr a
|
||||||
sta $09
|
sta has_80col
|
||||||
bne init_80_col
|
bne init_80_col
|
||||||
|
|
||||||
lda #CR|$80
|
|
||||||
|
|
||||||
;; Convert spaces to newlines if 40 Columns
|
;; Convert spaces to newlines if 40 Columns
|
||||||
|
lda #CR|$80
|
||||||
sta chain + (wrap1 - L1000)
|
sta chain + (wrap1 - L1000)
|
||||||
sta chain + (wrap4 - L1000)
|
sta chain + (wrap4 - L1000)
|
||||||
sta chain + (wrap5 - L1000)
|
sta chain + (wrap5 - L1000)
|
||||||
|
@ -151,12 +158,14 @@ L2095 := * + 1
|
||||||
L2099 := * + 1
|
L2099 := * + 1
|
||||||
ldy #$05
|
ldy #$05
|
||||||
sty $23
|
sty $23
|
||||||
jsr L116E
|
jsr SetPrefixAndCheckSysFile
|
||||||
lda $1204
|
lda $1204
|
||||||
lsr a
|
lsr a
|
||||||
sta L22C7
|
sta L22C7
|
||||||
jsr L222B
|
jsr L222B
|
||||||
sta year
|
sta bcd_year
|
||||||
|
|
||||||
|
;; Search device list for... ???
|
||||||
ldx DEVCNT
|
ldx DEVCNT
|
||||||
L20AF: lda DEVLST,x
|
L20AF: lda DEVLST,x
|
||||||
and #$0F
|
and #$0F
|
||||||
|
@ -173,11 +182,6 @@ L20C2: asl a
|
||||||
asl a
|
asl a
|
||||||
bne L20CB
|
bne L20CB
|
||||||
|
|
||||||
kPatchLength = $38
|
|
||||||
kPatch1Offset = $0
|
|
||||||
kPatch2Offset = $38
|
|
||||||
kPatch3Offset = $70
|
|
||||||
|
|
||||||
|
|
||||||
L20C8: lda DEVLST,x
|
L20C8: lda DEVLST,x
|
||||||
L20CB: and #%01110000 ; slot
|
L20CB: and #%01110000 ; slot
|
||||||
|
@ -188,17 +192,26 @@ L20CB: and #%01110000 ; slot
|
||||||
beq L20E3
|
beq L20E3
|
||||||
cmp #$02
|
cmp #$02
|
||||||
bcs L20FE
|
bcs L20FE
|
||||||
lda $07
|
lda mach_type
|
||||||
bne L20EE
|
bne not_iic
|
||||||
beq L20FE
|
beq L20FE ; always
|
||||||
|
|
||||||
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
|
kPatchLength = $38
|
||||||
|
kPatch1Offset = $0
|
||||||
|
kPatch2Offset = $38
|
||||||
|
kPatch3Offset = $70
|
||||||
|
|
||||||
L20E3: ldy #kPatch2Offset
|
L20E3: ldy #kPatch2Offset
|
||||||
lda $07
|
lda mach_type
|
||||||
beq apply_patch
|
beq apply_patch ; if IIc
|
||||||
ldy #kPatch1Offset
|
ldy #kPatch1Offset
|
||||||
jmp apply_patch
|
jmp apply_patch
|
||||||
|
|
||||||
;; Patch bytes on top of driver
|
;; Patch bytes on top of driver
|
||||||
L20EE: ldy #kPatch3Offset
|
not_iic:
|
||||||
|
ldy #kPatch3Offset
|
||||||
|
|
||||||
apply_patch:
|
apply_patch:
|
||||||
ldx #$00
|
ldx #$00
|
||||||
|
@ -211,7 +224,7 @@ apply_patch:
|
||||||
|
|
||||||
L20FE: lda #$02
|
L20FE: lda #$02
|
||||||
sta L210F
|
sta L210F
|
||||||
L2103: jsr L223F
|
L2103: jsr CalcMonthValidateDateTime
|
||||||
bcs L2111
|
bcs L2111
|
||||||
dec L210F
|
dec L210F
|
||||||
bpl L2103
|
bpl L2103
|
||||||
|
@ -220,8 +233,8 @@ L2103: jsr L223F
|
||||||
L210F: .byte 0
|
L210F: .byte 0
|
||||||
L2110: .byte 0
|
L2110: .byte 0
|
||||||
|
|
||||||
L2111: lda $07
|
L2111: lda mach_type
|
||||||
bne L2135
|
bne L2135 ; not IIc
|
||||||
lda L2110
|
lda L2110
|
||||||
bne L2135
|
bne L2135
|
||||||
inc L2110
|
inc L2110
|
||||||
|
@ -237,7 +250,7 @@ L2111: lda $07
|
||||||
bne L20FE
|
bne L20FE
|
||||||
|
|
||||||
L2135: ldy #MessageCode::kNoClock
|
L2135: ldy #MessageCode::kNoClock
|
||||||
sty $0B
|
sty msg_num
|
||||||
lda MACHID ; Check for clock card
|
lda MACHID ; Check for clock card
|
||||||
ror a
|
ror a
|
||||||
bcc no_clock ; Bit 0 = 0 means no clock card
|
bcc no_clock ; Bit 0 = 0 means no clock card
|
||||||
|
@ -263,7 +276,7 @@ L2156: lda #OPC_JMP_abs
|
||||||
sta MACHID
|
sta MACHID
|
||||||
bit KBD
|
bit KBD
|
||||||
bmi L218C
|
bmi L218C
|
||||||
lda $0A
|
lda month
|
||||||
cmp #$0B
|
cmp #$0B
|
||||||
bcc L2176
|
bcc L2176
|
||||||
bit L11FE
|
bit L11FE
|
||||||
|
@ -281,14 +294,14 @@ L2176: lda $1204
|
||||||
L218C: bit KBDSTRB
|
L218C: bit KBDSTRB
|
||||||
rol L11FE
|
rol L11FE
|
||||||
lda #$03
|
lda #$03
|
||||||
cmp $0A
|
cmp month
|
||||||
ror L11FE
|
ror L11FE
|
||||||
|
|
||||||
;; Show current year prompt
|
;; Show current year prompt
|
||||||
L2199: ldy #MessageCode::kCurrentYear
|
L2199: ldy #MessageCode::kCurrentYear
|
||||||
jsr ShowMessage
|
jsr ShowMessage
|
||||||
|
|
||||||
lda year ; 2-digit year
|
lda bcd_year ; 2-digit year
|
||||||
jsr PRBYTE
|
jsr PRBYTE
|
||||||
|
|
||||||
ldy #MessageCode::kOkPrompt
|
ldy #MessageCode::kOkPrompt
|
||||||
|
@ -310,18 +323,18 @@ L2199: ldy #MessageCode::kCurrentYear
|
||||||
asl a
|
asl a
|
||||||
asl a
|
asl a
|
||||||
asl a
|
asl a
|
||||||
sta year
|
sta bcd_year
|
||||||
jsr GetDigitKey ; Year
|
jsr GetDigitKey ; Year
|
||||||
and #$0F
|
and #$0F
|
||||||
ora year
|
ora bcd_year
|
||||||
sta year
|
sta bcd_year
|
||||||
|
|
||||||
jmp L2199
|
jmp L2199
|
||||||
|
|
||||||
;; Current year is okay
|
;; Current year is okay
|
||||||
L21D3: lda $1204
|
L21D3: lda $1204
|
||||||
jsr L2210
|
jsr L2210
|
||||||
jsr L238A
|
jsr InvokeDriver
|
||||||
jsr L111A
|
jsr L111A
|
||||||
L21DF: lda RWRAM1
|
L21DF: lda RWRAM1
|
||||||
lda RWRAM1
|
lda RWRAM1
|
||||||
|
@ -350,7 +363,7 @@ install_ptr := * + 1
|
||||||
;; Chain
|
;; Chain
|
||||||
jmp L1000
|
jmp L1000
|
||||||
|
|
||||||
L2210: lda year
|
L2210: lda bcd_year
|
||||||
pha
|
pha
|
||||||
lsr a
|
lsr a
|
||||||
lsr a
|
lsr a
|
||||||
|
@ -369,12 +382,13 @@ L2210: lda year
|
||||||
sta L22C7
|
sta L22C7
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L222B: ldx #$FF
|
.proc L222B
|
||||||
L222D: inx
|
ldx #$FF
|
||||||
|
: inx
|
||||||
sec
|
sec
|
||||||
sbc #$0A
|
sbc #10
|
||||||
bcs L222D
|
bcs :-
|
||||||
adc #$0A
|
adc #10
|
||||||
sta $06
|
sta $06
|
||||||
txa
|
txa
|
||||||
asl a
|
asl a
|
||||||
|
@ -383,8 +397,16 @@ L222D: inx
|
||||||
asl a
|
asl a
|
||||||
ora $06
|
ora $06
|
||||||
rts
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
L223F: jsr L238A
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
|
;;; Returns with carry set if date is not valid.
|
||||||
|
|
||||||
|
.proc CalcMonthValidateDateTime
|
||||||
|
jsr InvokeDriver
|
||||||
|
|
||||||
|
;; Check month
|
||||||
lda DATELO+1
|
lda DATELO+1
|
||||||
ror a
|
ror a
|
||||||
lda DATELO
|
lda DATELO
|
||||||
|
@ -394,16 +416,24 @@ L223F: jsr L238A
|
||||||
rol a
|
rol a
|
||||||
and #$0F
|
and #$0F
|
||||||
sec
|
sec
|
||||||
beq L2264
|
beq done ; Month = 0 is failure
|
||||||
cmp #$0D
|
|
||||||
bcs L2264
|
cmp #13
|
||||||
sta $0A
|
bcs done ; Month >= 13 is failure
|
||||||
|
|
||||||
|
sta month
|
||||||
|
|
||||||
|
;; Check hour
|
||||||
lda TIMELO+1
|
lda TIMELO+1
|
||||||
cmp #$18
|
cmp #24
|
||||||
bcs L2264
|
bcs done ; Hour >= 24 is failure
|
||||||
|
|
||||||
|
;; Check minute
|
||||||
lda TIMELO
|
lda TIMELO
|
||||||
cmp #$3C
|
cmp #60 ; Min >= 60 is failure
|
||||||
L2264: rts
|
|
||||||
|
done: rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Clock Driver (Relocatable)
|
;;; Clock Driver (Relocatable)
|
||||||
|
@ -425,7 +455,7 @@ L2274 := * + 1
|
||||||
sta PORT2_ACIA_COMMAND
|
sta PORT2_ACIA_COMMAND
|
||||||
L2276: dex
|
L2276: dex
|
||||||
bne L2276
|
bne L2276
|
||||||
eor #$0A
|
eor #%00001010
|
||||||
ldx #$09
|
ldx #$09
|
||||||
dey
|
dey
|
||||||
bne L2273
|
bne L2273
|
||||||
|
@ -620,8 +650,10 @@ L236B: lda MOUSE_BTN
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
|
|
||||||
L238A: jsr Driver
|
.proc InvokeDriver
|
||||||
|
jsr Driver
|
||||||
rts
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -638,8 +670,9 @@ L238A: jsr Driver
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
L239C: .byte $DF
|
case_mask_table:
|
||||||
.byte $FF
|
.byte %11011111 ; map lowercase to uppercase
|
||||||
|
.byte %11111111 ; preserve case
|
||||||
|
|
||||||
|
|
||||||
chain:
|
chain:
|
||||||
|
@ -698,12 +731,12 @@ L1053: lda $05
|
||||||
sta $121D
|
sta $121D
|
||||||
sta $0280
|
sta $0280
|
||||||
inc $05
|
inc $05
|
||||||
lda $0B
|
lda msg_num
|
||||||
cmp #$07
|
cmp #$07
|
||||||
beq L1070
|
beq L1070
|
||||||
ldy #$03
|
ldy #$03
|
||||||
jsr L10E5
|
jsr L10E5
|
||||||
lda $07
|
lda mach_type
|
||||||
beq L106D
|
beq L106D
|
||||||
iny
|
iny
|
||||||
L106D: jsr ShowMessage
|
L106D: jsr ShowMessage
|
||||||
|
@ -718,13 +751,13 @@ L1077: lda ($00),y
|
||||||
iny
|
iny
|
||||||
cpy $05
|
cpy $05
|
||||||
bne L1077
|
bne L1077
|
||||||
jsr L114F
|
jsr LoadSysFile
|
||||||
lda #$00
|
lda #$00
|
||||||
sta WNDTOP
|
sta WNDTOP
|
||||||
lda #$18
|
lda #$18
|
||||||
sta WNDBTM
|
sta WNDBTM
|
||||||
jsr MON_HOME
|
jsr MON_HOME
|
||||||
lda $09
|
lda has_80col
|
||||||
beq L10A5
|
beq L10A5
|
||||||
lda #$15
|
lda #$15
|
||||||
jsr COUT
|
jsr COUT
|
||||||
|
@ -769,31 +802,33 @@ L10E5: lda L11FE
|
||||||
L10EE: rts
|
L10EE: rts
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
;;; Call with message number in Y
|
;;; Call with message number in Y.
|
||||||
|
;;; Clears screen unless kOkPromptor or kRunning.
|
||||||
|
|
||||||
.proc ShowMessage
|
.proc ShowMessage
|
||||||
lda message_table_lo,y
|
lda message_table_lo,y
|
||||||
sta L1109
|
sta ptr
|
||||||
lda message_table_hi,y
|
lda message_table_hi,y
|
||||||
sta L1109+1
|
sta ptr+1
|
||||||
cpy #$06
|
|
||||||
beq L1106
|
cpy #MessageCode::kOkPrompt
|
||||||
cpy #$08
|
beq :+
|
||||||
beq L1106
|
cpy #MessageCode::kRunning
|
||||||
|
beq :+
|
||||||
jsr MON_HOME
|
jsr MON_HOME
|
||||||
L1106: ldy #$00
|
: ldy #0
|
||||||
|
|
||||||
L1109 := *+1
|
ptr := *+1
|
||||||
|
loop: lda $F000,y
|
||||||
L1108: lda $F000,y
|
beq done
|
||||||
beq L1119
|
cmp #'`'|$80 ; Not lower case?
|
||||||
cmp #$E0
|
bcc :+
|
||||||
bcc L1113
|
and case_mask
|
||||||
and $08
|
: jsr COUT
|
||||||
L1113: jsr COUT
|
|
||||||
iny
|
iny
|
||||||
bne L1108
|
bne loop
|
||||||
L1119: rts
|
|
||||||
|
done: rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
@ -822,7 +857,10 @@ L1121: lda DATELO,y
|
||||||
jsr RDKEY
|
jsr RDKEY
|
||||||
jmp L111A
|
jmp L111A
|
||||||
|
|
||||||
L114F: PRODOS_CALL MLI_OPEN, open_params
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
|
.proc LoadSysFile
|
||||||
|
PRODOS_CALL MLI_OPEN, open_params
|
||||||
bne ShowDiskErrorAndChain
|
bne ShowDiskErrorAndChain
|
||||||
lda open_params_ref_num
|
lda open_params_ref_num
|
||||||
sta read_params_ref_num
|
sta read_params_ref_num
|
||||||
|
@ -833,8 +871,12 @@ L114F: PRODOS_CALL MLI_OPEN, open_params
|
||||||
PRODOS_CALL MLI_CLOSE, close_params
|
PRODOS_CALL MLI_CLOSE, close_params
|
||||||
bne ShowDiskErrorAndChain
|
bne ShowDiskErrorAndChain
|
||||||
rts
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
L116E: lda DEVNUM
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
|
.proc SetPrefixAndCheckSysFile
|
||||||
|
lda DEVNUM ; Most recently accessed device
|
||||||
sta on_line_unit_num
|
sta on_line_unit_num
|
||||||
sta read_block_unit_num
|
sta read_block_unit_num
|
||||||
|
|
||||||
|
@ -855,6 +897,9 @@ L116E: lda DEVNUM
|
||||||
PRODOS_CALL MLI_GET_FILE_INFO, file_info_params
|
PRODOS_CALL MLI_GET_FILE_INFO, file_info_params
|
||||||
bne ShowDiskErrorAndChain
|
bne ShowDiskErrorAndChain
|
||||||
rts
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
L119F: PRODOS_CALL MLI_READ_BLOCK, read_block_params
|
L119F: PRODOS_CALL MLI_READ_BLOCK, read_block_params
|
||||||
bne ShowDiskErrorAndChain
|
bne ShowDiskErrorAndChain
|
||||||
|
@ -871,10 +916,10 @@ L119F: PRODOS_CALL MLI_READ_BLOCK, read_block_params
|
||||||
;;; kNoClock (in which case: hang)
|
;;; kNoClock (in which case: hang)
|
||||||
|
|
||||||
.proc ShowMessageAndMaybeChain
|
.proc ShowMessageAndMaybeChain
|
||||||
sty $0B
|
sty msg_num
|
||||||
jsr ShowMessage
|
jsr ShowMessage
|
||||||
jsr L11C3
|
jsr L11C3
|
||||||
lda $0B
|
lda msg_num
|
||||||
cmp #MessageCode::kNoClock
|
cmp #MessageCode::kNoClock
|
||||||
bne loop
|
bne loop
|
||||||
lda #OPC_RTS
|
lda #OPC_RTS
|
||||||
|
@ -949,7 +994,7 @@ file_info_params:
|
||||||
;;; Misc variables
|
;;; Misc variables
|
||||||
|
|
||||||
L11FE: .byte 0 ; ???
|
L11FE: .byte 0 ; ???
|
||||||
year: .byte 0 ; 2-digit (shared)
|
bcd_year: .byte 0 ; 2-digit (shared)
|
||||||
|
|
||||||
L1200:
|
L1200:
|
||||||
;; buffer for variables, filename
|
;; buffer for variables, filename
|
||||||
|
|
Loading…
Reference in New Issue
Block a user