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