a2d/desktop/sys.s

2342 lines
50 KiB
ArmAsm
Raw Normal View History

2018-03-03 03:56:39 +00:00
.setcpu "6502"
.org $2000
2018-03-03 04:06:58 +00:00
.include "apple2.inc"
.include "../inc/apple2.inc"
.include "../inc/prodos.inc"
2018-03-03 03:57:30 +00:00
.include "../macros.inc"
2018-03-04 19:35:04 +00:00
;;; ============================================================
.proc bootstrap
2018-03-03 04:06:58 +00:00
2018-03-04 19:35:04 +00:00
L0300 := $0300
2018-03-03 04:06:58 +00:00
2018-03-03 03:56:39 +00:00
L2000: jmp L24B6
2018-03-04 05:33:40 +00:00
date: .word 0 ; written into file
2018-03-03 04:53:10 +00:00
L2005:
.res 256, 0
.res 256, 0
.res 256, 0
2018-03-03 03:56:39 +00:00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
2018-03-04 19:35:04 +00:00
.byte $02,$00
.addr $2363
2018-03-04 03:43:41 +00:00
.proc get_prefix_params2
2018-03-04 19:35:04 +00:00
param_count: .byte 2 ; GET_PREFIX, but param_count is 2 ??? Bug???
2018-03-04 03:43:41 +00:00
data_buffer: .addr $0D00
.endproc
2018-03-04 04:03:42 +00:00
DEFINE_GET_FILE_INFO_PARAMS get_file_info_params4, $0D00
2018-03-04 19:35:04 +00:00
.byte $00,$01
.addr $2362
.byte $00,$00,$00
2018-03-03 03:56:39 +00:00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00
L2372: .byte $00
2018-03-03 17:04:07 +00:00
L2373: .byte $00
2018-03-04 19:35:04 +00:00
DEFINE_ON_LINE_PARAMS on_line_params,, on_line_buffer
2018-03-03 17:04:07 +00:00
2018-03-03 03:56:39 +00:00
L2378: .byte $00,$00
2018-03-04 19:35:04 +00:00
on_line_buffer: .res 17, 0
2018-03-03 17:04:07 +00:00
2018-03-04 03:27:31 +00:00
DEFINE_GET_PREFIX_PARAMS get_prefix_params, L26F5
2018-03-04 19:35:04 +00:00
DEFINE_SET_PREFIX_PARAMS set_prefix_params, path_buf0
2018-03-03 17:04:07 +00:00
.byte $0A
2018-03-04 19:35:04 +00:00
.addr $2379
.byte $00,$00,$00,$00,$00,$00
2018-03-03 03:56:39 +00:00
.byte $00,$00,$00,$00,$00,$00,$00,$00
2018-03-04 19:35:04 +00:00
.byte $00,$00,$00
.byte $07,$60,$2B,$C3,$0F
2018-03-03 03:56:39 +00:00
.byte $00,$00,$0D,$00,$00,$00,$00,$04
.byte $00,$00,$03,$00,$01,$00,$00,$01
.byte $00,$03,$F5,$26,$00,$08,$00,$04
2018-03-04 19:35:04 +00:00
.byte $00
.addr $23C9
.byte $04,$00,$00,$00,$00
2018-03-03 03:56:39 +00:00
.byte $00,$00,$00,$01,$00,$04,$00,$21
2018-03-04 19:35:04 +00:00
.byte $28,$27,$00,$00,$00,$04,$00
.addr $23DF
.byte $05,$00,$00,$00,$00,$00,$00
2018-03-03 03:56:39 +00:00
.byte $00,$00,$00,$00,$00,$00
2018-03-03 17:04:07 +00:00
DEFINE_CLOSE_PARAMS close_params2
DEFINE_CLOSE_PARAMS close_params3
2018-03-04 19:35:04 +00:00
.byte $01
.addr L26F5
2018-03-04 03:27:31 +00:00
DEFINE_OPEN_PARAMS open_params3, L26F5, $0D00
2018-03-04 19:35:04 +00:00
DEFINE_OPEN_PARAMS open_params4, path_buf0, $1100
2018-03-04 03:15:47 +00:00
DEFINE_READ_PARAMS read_params3, $4000, $7F00
2018-03-04 03:27:31 +00:00
DEFINE_WRITE_PARAMS write_params, $4000, $7F00
2018-03-04 19:35:04 +00:00
DEFINE_CREATE_PARAMS create_params, path_buf0, $C3, 0, 0
.byte $07
.addr path_buf0
.byte $00
2018-03-03 03:56:39 +00:00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00
2018-03-03 17:04:07 +00:00
2018-03-04 03:27:31 +00:00
DEFINE_GET_FILE_INFO_PARAMS get_file_info_params, L26F5
2018-03-03 17:04:07 +00:00
.byte 0
2018-03-04 04:03:42 +00:00
str_f1: PASCAL_STRING "DESKTOP1"
str_f2: PASCAL_STRING "DESKTOP2"
str_f3: PASCAL_STRING "DESK.ACC"
str_f4: PASCAL_STRING "SELECTOR.LIST"
str_f5: PASCAL_STRING "SELECTOR"
str_f6: PASCAL_STRING "PRODOS"
L2471: .addr str_f1,str_f2,str_f3,str_f4,str_f5,str_f6
2018-03-04 19:35:04 +00:00
str_copying_to_ramcard: PASCAL_STRING "Copying Apple II DeskTop into RAMCard"
2018-03-03 03:56:39 +00:00
L24A3: .byte $60
L24A4: .byte $20,$00,$03,$00
L24A8: .byte $01,$03,$05,$07
L24AC: .byte $00
2018-03-04 05:33:40 +00:00
;; Selector signature
2018-03-04 19:35:04 +00:00
L24AD: .byte $AD,$8B,$C0,$18,$FB,$5C,$04,$D0,$E0
2018-03-04 05:33:40 +00:00
L24B6: sta MIXCLR
sta HIRES
sta TXTCLR
sta CLR80VID
sta AN3_OFF
sta AN3_ON
sta AN3_OFF
sta AN3_ON
sta SET80VID
sta DHIRESON
sta TXTSET
lda DATELO ; Any date set?
ora DATEHI
2018-03-03 03:56:39 +00:00
bne L24EB
2018-03-04 05:33:40 +00:00
copy16 date, DATELO ; Copy timestamp embedded in this file
L24EB: lda MACHID
and #$30 ; bits 4,5 set = 128k
2018-03-03 03:56:39 +00:00
cmp #$30
2018-03-04 05:33:40 +00:00
beq have128k
;; Relocate FILER launch routine to $300 and invoke
2018-03-03 03:56:39 +00:00
ldy #$D0
2018-03-04 05:33:40 +00:00
: lda launch_filer,y
2018-03-03 03:56:39 +00:00
sta L0300,y
dey
cpy #$FF
2018-03-04 05:33:40 +00:00
bne :-
2018-03-03 03:56:39 +00:00
jmp L0300
2018-03-04 05:33:40 +00:00
have128k:
lda #$00
sta SHADOW ; IIgs ???
lda DEVNUM
2018-03-03 03:56:39 +00:00
sta L24AC
2018-03-04 05:33:40 +00:00
lda LCBANK2
lda LCBANK2
;; Check quit routine
2018-03-03 03:56:39 +00:00
ldx #$08
2018-03-04 05:33:40 +00:00
: lda SELECTOR,x ; Quit routine?
2018-03-03 03:56:39 +00:00
cmp L24AD,x
2018-03-04 05:33:40 +00:00
bne nomatch
2018-03-03 03:56:39 +00:00
dex
2018-03-04 05:33:40 +00:00
bpl :-
lda #0
beq match
nomatch:
lda #$80
match: sta $D3AC
2018-03-03 06:44:28 +00:00
lda ROMIN2
2018-03-03 03:56:39 +00:00
ldx #$00
jsr L26A5
lda #$00
sta L2BE2
sta $08
lda #$C1
sta $09
L253E: ldx #$00
L2540: lda L24A8,x
tay
lda ($08),y
cmp L24A4,x
bne L255A
inx
cpx #$04
bcc L2540
ldy #$FB
lda ($08),y
and #$01
beq L255A
bne L2576
L255A: inc $09
lda $09
cmp #$C8
bcc L253E
2018-03-04 05:33:40 +00:00
ldy DEVCNT
L2565: lda DEVLST,y
2018-03-03 03:56:39 +00:00
cmp #$3E
beq L2572
dey
bpl L2565
jmp L26E8
L2572: lda #$03
bne L257A
L2576: lda $09
and #$0F
L257A: sta L2BE3
asl a
asl a
asl a
asl a
2018-03-03 17:04:07 +00:00
sta on_line_params::unit_num
2018-03-03 03:56:39 +00:00
sta L2373
2018-03-03 17:04:07 +00:00
MLI_CALL ON_LINE, on_line_params
2018-03-03 03:56:39 +00:00
beq L2592
jmp L26E8
L2592: lda L2373
cmp #$30
beq L25AD
2018-03-03 17:04:07 +00:00
sta write_block_params_unit_num
sta write_block_params2_unit_num
MLI_CALL WRITE_BLOCK, write_block_params
2018-03-03 03:56:39 +00:00
bne L25AD
2018-03-03 17:04:07 +00:00
MLI_CALL WRITE_BLOCK, write_block_params2
2018-03-04 19:35:04 +00:00
L25AD: lda on_line_buffer
2018-03-03 03:56:39 +00:00
and #$0F
tay
iny
2018-03-04 19:35:04 +00:00
sty path_buf0
lda #'/'
sta on_line_buffer
sta path_buf0+1
L25BF: lda on_line_buffer,y
sta path_buf0+1,y
2018-03-03 03:56:39 +00:00
dey
bne L25BF
ldx #$C0
jsr L26A5
2018-03-04 19:35:04 +00:00
addr_call L26B2, path_buf0
2018-03-03 03:56:39 +00:00
jsr L2AB2
bcs L25E4
ldx #$80
jsr L26A5
jsr L2B57
jmp L26E8
2018-03-04 19:35:04 +00:00
L25E4: lda BUTN1
2018-03-03 03:56:39 +00:00
sta L2372
2018-03-04 19:35:04 +00:00
lda BUTN0
2018-03-03 03:56:39 +00:00
bpl L2603
jmp L26E8
2018-03-03 04:32:55 +00:00
L25F2: PASCAL_STRING "/DeskTop"
2018-03-03 04:22:09 +00:00
L25FB: .byte $0A,$00,$00,$C3,$0F,$00,$00,$0D
L2603: .byte $20,$CD
plp
2018-03-03 17:04:07 +00:00
MLI_CALL GET_PREFIX, get_prefix_params
2018-03-03 03:56:39 +00:00
beq L2611
jmp L28F4
L2611: dec L26F5
ldx #$80
jsr L26A5
ldy L26F5
L261C: lda L26F5,y
sta L2005,y
dey
bpl L261C
2018-03-04 19:35:04 +00:00
ldy path_buf0
2018-03-03 03:56:39 +00:00
ldx #$00
L262A: iny
inx
lda L25F2,x
2018-03-04 19:35:04 +00:00
sta path_buf0,y
2018-03-03 03:56:39 +00:00
cpx L25F2
bne L262A
2018-03-04 19:35:04 +00:00
sty path_buf0
2018-03-03 03:56:39 +00:00
ldx #$07
L263C: lda L25FB,x
2018-03-03 17:04:07 +00:00
sta get_file_info_params,x
2018-03-03 03:56:39 +00:00
dex
cpx #$03
bne L263C
jsr L2A95
2018-03-04 19:35:04 +00:00
lda path_buf0
2018-03-03 03:56:39 +00:00
sta L2378
lda #$00
sta L2BE1
L2655: lda L2BE1
asl a
tax
lda L2471,x
sta $06
2018-03-04 04:03:42 +00:00
lda L2471+1,x
sta $06+1
2018-03-03 03:56:39 +00:00
ldy #$00
lda ($06),y
tay
L2669: lda ($06),y
sta L2821,y
dey
bpl L2669
jsr L2912
inc L2BE1
lda L2BE1
cmp #$06
bne L2655
jmp L2681
L2681: lda L2378
beq L268F
2018-03-04 19:35:04 +00:00
sta path_buf0
2018-03-03 17:04:07 +00:00
MLI_CALL SET_PREFIX, set_prefix_params
2018-03-03 03:56:39 +00:00
L268F: jsr L2B37
jsr L2B57
lda #$00
2018-03-04 19:35:04 +00:00
sta $C071 ; ???
2018-03-03 03:56:39 +00:00
ldy #$17
2018-03-04 05:33:40 +00:00
L269C: sta BITMAP,y
2018-03-03 03:56:39 +00:00
dey
bpl L269C
jmp L3000
2018-03-04 19:35:04 +00:00
L26A5: lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
stx $D3FF
2018-03-03 06:44:28 +00:00
lda ROMIN2
rts
2018-03-03 03:56:39 +00:00
2018-03-03 03:57:30 +00:00
L26B2: stax $06
2018-03-04 19:35:04 +00:00
lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
ldy #$00
lda ($06),y
tay
L26C1: lda ($06),y
sta $D3EE,y
dey
bpl L26C1
2018-03-03 06:44:28 +00:00
lda ROMIN2
rts
2018-03-03 03:56:39 +00:00
2018-03-03 03:57:30 +00:00
L26CD: stax $06
2018-03-04 19:35:04 +00:00
lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
ldy #$00
lda ($06),y
tay
L26DC: lda ($06),y
sta $D3AD,y
dey
bpl L26DC
2018-03-03 06:44:28 +00:00
lda ROMIN2
rts
2018-03-03 03:56:39 +00:00
L26E8: lda #$00
sta L2BE2
jmp L2681
2018-03-03 03:57:30 +00:00
.byte 0
2018-03-03 03:56:39 +00:00
ora a:$00
2018-03-03 03:57:30 +00:00
.byte 0
2018-03-04 03:27:31 +00:00
2018-03-04 19:35:04 +00:00
L26F5: .res 300, 0
2018-03-04 03:27:31 +00:00
2018-03-03 03:57:30 +00:00
L2821: .byte 0
2018-03-03 04:53:10 +00:00
L2822: .res 15, 0
L2831: .res 32, 0
2018-03-03 03:56:39 +00:00
L2851: lda L2821
bne L2857
rts
L2857: ldx #$00
ldy L26F5
2018-03-04 19:35:04 +00:00
lda #'/'
sta L26F5+1,y
2018-03-03 03:56:39 +00:00
iny
L2862: cpx L2821
bcs L2872
lda L2822,x
2018-03-04 19:35:04 +00:00
sta L26F5+1,y
2018-03-03 03:56:39 +00:00
inx
iny
jmp L2862
L2872: sty L26F5
rts
L2876: ldx L26F5
bne L287C
rts
L287C: lda L26F5,x
2018-03-04 19:35:04 +00:00
cmp #'/'
2018-03-03 03:56:39 +00:00
beq L288A
dex
bne L287C
stx L26F5
rts
L288A: dex
stx L26F5
rts
L288F: lda L2821
bne L2895
rts
L2895: ldx #$00
2018-03-04 19:35:04 +00:00
ldy path_buf0
lda #'/'
sta path_buf0+1,y
2018-03-03 03:56:39 +00:00
iny
L28A0: cpx L2821
bcs L28B0
lda L2822,x
2018-03-04 19:35:04 +00:00
sta path_buf0+1,y
2018-03-03 03:56:39 +00:00
inx
iny
jmp L28A0
2018-03-04 19:35:04 +00:00
L28B0: sty path_buf0
2018-03-03 03:56:39 +00:00
rts
2018-03-04 19:35:04 +00:00
L28B4: ldx path_buf0
2018-03-03 03:56:39 +00:00
bne L28BA
rts
2018-03-04 19:35:04 +00:00
L28BA: lda path_buf0,x
cmp #'/'
2018-03-03 03:56:39 +00:00
beq L28C8
dex
bne L28BA
2018-03-04 19:35:04 +00:00
stx path_buf0
2018-03-03 03:56:39 +00:00
rts
L28C8: dex
2018-03-04 19:35:04 +00:00
stx path_buf0
2018-03-03 03:56:39 +00:00
rts
2018-03-04 19:35:04 +00:00
;; Turn on 80-col mode, and draw message (centered)
L28CD: jsr SLOT3ENTRY
2018-03-03 03:56:39 +00:00
jsr HOME
2018-03-04 19:35:04 +00:00
lda #80
2018-03-03 03:56:39 +00:00
sec
2018-03-04 19:35:04 +00:00
sbc str_copying_to_ramcard
lsr a ; / 2 to center
sta CH
lda #12
sta CV
2018-03-03 04:06:58 +00:00
jsr VTAB
2018-03-04 19:35:04 +00:00
ldy #0
2018-03-03 03:56:39 +00:00
L28E5: iny
2018-03-04 19:35:04 +00:00
lda str_copying_to_ramcard,y
2018-03-03 03:56:39 +00:00
ora #$80
jsr COUT
2018-03-04 19:35:04 +00:00
cpy str_copying_to_ramcard
2018-03-03 03:56:39 +00:00
bne L28E5
rts
L28F4: lda #$00
sta L2378
jmp L26E8
ldy #$00
L28FE: lda $0200,y
cmp #$8D
beq L290E
and #$7F
2018-03-04 19:35:04 +00:00
sta L26F5+1,y
2018-03-03 03:56:39 +00:00
iny
jmp L28FE
L290E: sty L26F5
rts
L2912: jsr L288F
jsr L2851
2018-03-03 17:04:07 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params
2018-03-03 06:44:28 +00:00
beq :+
2018-03-04 19:35:04 +00:00
cmp #PDERR_FILE_NOT_FOUND
2018-03-03 03:56:39 +00:00
beq L294B
jmp L26E8
2018-03-03 17:04:07 +00:00
: lda get_file_info_params::file_type
2018-03-03 03:56:39 +00:00
sta L2831
cmp #$0F
bne L2937
jsr L2962
jmp L2951
L2937: jsr L2A95
2018-03-04 19:35:04 +00:00
cmp #PDERR_DUPLICATE_FILENAME
2018-03-03 03:56:39 +00:00
bne L2948
lda L2BE1
bne L294B
pla
pla
jmp L2681
L2948: jsr L2A11
L294B: jsr L2876
jsr L28B4
L2951: rts
2018-03-04 03:27:31 +00:00
DEFINE_OPEN_PARAMS open_params2, L26F5, $A000
2018-03-04 03:15:47 +00:00
DEFINE_READ_PARAMS read_params2, $A400, $0200
2018-03-03 17:04:07 +00:00
DEFINE_CLOSE_PARAMS close_params
2018-03-03 03:56:39 +00:00
L2962: jsr L2A95
2018-03-04 19:35:04 +00:00
cmp #PDERR_DUPLICATE_FILENAME
2018-03-03 03:56:39 +00:00
beq L2974
2018-03-04 02:39:21 +00:00
MLI_CALL OPEN, open_params2
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jsr L28F4
L2974: rts
2018-03-04 02:39:21 +00:00
: lda open_params2::ref_num
2018-03-04 03:15:47 +00:00
sta read_params2::ref_num
2018-03-03 17:04:07 +00:00
sta close_params::ref_num
2018-03-04 03:15:47 +00:00
MLI_CALL READ, read_params2
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jsr L28F4
rts
2018-03-03 06:44:28 +00:00
: lda #$00
2018-03-03 03:56:39 +00:00
sta L2A10
lda #$2B
sta $06
lda #$A4
sta $07
L2997: lda $A425
cmp L2A10
bne L29B1
2018-03-03 17:04:07 +00:00
L299F: MLI_CALL CLOSE, close_params
2018-03-03 03:56:39 +00:00
beq L29AA
jmp L28F4
L29AA: jsr L2876
jsr L28B4
rts
L29B1: ldy #$00
lda ($06),y
bne L29BA
jmp L29F6
L29BA: and #$0F
tay
L29BD: lda ($06),y
sta L2821,y
dey
bne L29BD
lda ($06),y
and #$0F
sta L2821,y
jsr L288F
jsr L2851
2018-03-03 17:04:07 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L28F4
2018-03-03 17:04:07 +00:00
: lda get_file_info_params::file_type
2018-03-03 03:56:39 +00:00
sta L2831
jsr L2A95
2018-03-04 19:35:04 +00:00
cmp #PDERR_DUPLICATE_FILENAME
2018-03-03 03:56:39 +00:00
beq L29ED
jsr L2A11
L29ED: jsr L2876
jsr L28B4
inc L2A10
L29F6: lda $06
clc
adc $A423
sta $06
lda $07
adc #$00
sta $07
lda $07
cmp #$A6
bcs L2A0D
jmp L2997
L2A0D: jmp L299F
2018-03-03 03:57:30 +00:00
L2A10: .byte 0
2018-03-04 02:39:21 +00:00
L2A11: MLI_CALL OPEN, open_params3
2018-03-03 03:56:39 +00:00
beq L2A1F
jsr L28F4
jmp L2A11
2018-03-04 02:39:21 +00:00
L2A1F: MLI_CALL OPEN, open_params4
2018-03-03 03:56:39 +00:00
beq L2A2D
jsr L28F4
jmp L2A1F
2018-03-04 02:39:21 +00:00
L2A2D: lda open_params3::ref_num
2018-03-04 03:15:47 +00:00
sta read_params3::ref_num
2018-03-03 17:04:07 +00:00
sta close_params2::ref_num
2018-03-04 02:39:21 +00:00
lda open_params4::ref_num
2018-03-04 03:27:31 +00:00
sta write_params::ref_num
2018-03-03 17:04:07 +00:00
sta close_params3::ref_num
2018-03-04 03:15:47 +00:00
L2A3F: copy16 #$7F00, read_params3::request_count
L2A49: MLI_CALL READ, read_params3
2018-03-03 03:56:39 +00:00
beq L2A5B
2018-03-04 19:35:04 +00:00
cmp #PDERR_END_OF_FILE
2018-03-03 03:56:39 +00:00
beq L2A88
jsr L28F4
jmp L2A49
2018-03-04 03:27:31 +00:00
L2A5B: copy16 read_params3::trans_count, write_params::request_count
2018-03-04 03:15:47 +00:00
ora read_params3::trans_count
2018-03-03 03:56:39 +00:00
beq L2A88
2018-03-04 03:27:31 +00:00
L2A6C: MLI_CALL WRITE, write_params
2018-03-03 06:44:28 +00:00
beq :+
jsr L28F4
2018-03-03 03:56:39 +00:00
jmp L2A6C
2018-03-04 03:27:31 +00:00
: lda write_params::trans_count
cmp #<$7F00
2018-03-03 03:56:39 +00:00
bne L2A88
2018-03-04 03:27:31 +00:00
lda write_params::trans_count+1
cmp #>$7F00
2018-03-03 03:56:39 +00:00
beq L2A3F
2018-03-03 17:04:07 +00:00
L2A88: MLI_CALL CLOSE, close_params2
MLI_CALL CLOSE, close_params3
2018-03-03 03:56:39 +00:00
rts
2018-03-04 03:43:41 +00:00
;; Copy file_type, aux_type, storage_type
L2A95: ldx #7
: lda get_file_info_params,x
sta create_params,x
2018-03-03 03:56:39 +00:00
dex
2018-03-04 03:43:41 +00:00
cpx #3
bne :-
MLI_CALL CREATE, create_params
2018-03-03 06:44:28 +00:00
beq L2AB1
2018-03-04 19:35:04 +00:00
cmp #PDERR_DUPLICATE_FILENAME
2018-03-03 03:56:39 +00:00
beq L2AB1
jsr L28F4
L2AB1: rts
L2AB2: lda L24AC
cmp #$3E
bne L2ABC
jmp L2AE6
L2ABC: and #$70
lsr a
lsr a
lsr a
lsr a
ora #$C0
sta $09
lda #$00
sta $08
ldx #$00
L2ACC: lda L24A8,x
tay
lda ($08),y
cmp L24A4,x
bne L2AE4
inx
cpx #$04
bcc L2ACC
ldy #$FB
lda ($08),y
and #$01
bne L2AE6
L2AE4: sec
rts
2018-03-04 03:43:41 +00:00
L2AE6: MLI_CALL GET_PREFIX, get_prefix_params2
2018-03-03 03:56:39 +00:00
bne L2AE4
ldx $0D00
ldy #$00
L2AF3: inx
iny
lda L2B0D,y
sta $0D00,x
cpy L2B0D
bne L2AF3
stx $0D00
2018-03-04 04:03:42 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params4
2018-03-03 03:56:39 +00:00
beq L2AE4
clc
rts
2018-03-04 02:39:21 +00:00
2018-03-03 04:32:55 +00:00
L2B0D: PASCAL_STRING "DeskTop2"
2018-03-04 03:27:31 +00:00
DEFINE_OPEN_PARAMS open_params5, str_desktop1_path, $1000
str_desktop1_path:
PASCAL_STRING "DeskTop/DESKTOP1"
DEFINE_WRITE_PARAMS write_params2, $2000, $45
2018-03-03 17:04:07 +00:00
DEFINE_CLOSE_PARAMS close_params4
2018-03-04 02:39:21 +00:00
L2B37: MLI_CALL OPEN, open_params5
2018-03-03 03:56:39 +00:00
bne L2B56
2018-03-04 02:39:21 +00:00
lda open_params5::ref_num
2018-03-04 03:27:31 +00:00
sta write_params2::ref_num
2018-03-03 17:04:07 +00:00
sta close_params4::ref_num
2018-03-04 03:27:31 +00:00
MLI_CALL WRITE, write_params2
2018-03-03 06:44:28 +00:00
bne L2B56
2018-03-03 17:04:07 +00:00
MLI_CALL CLOSE, close_params4
2018-03-03 03:56:39 +00:00
L2B56: rts
2018-03-03 03:57:30 +00:00
L2B57: addr_call L26CD, $2005
2018-03-03 04:32:55 +00:00
rts
2018-03-03 03:56:39 +00:00
2018-03-03 03:57:30 +00:00
.byte 0
2018-03-04 19:35:04 +00:00
path_buf0:
.res 65, 0
2018-03-03 17:04:07 +00:00
;;; ============================================================
2018-03-04 19:35:04 +00:00
;;; Launch FILER - used if machine is not 128k
;;; Relocated to $300 before invoking
2018-03-03 17:04:07 +00:00
2018-03-04 19:35:04 +00:00
saved_org := *
2018-03-04 05:33:40 +00:00
.proc launch_filer
2018-03-03 17:04:07 +00:00
.org $300
sys_start := $2000
MLI_CALL OPEN, open_params
beq :+
2018-03-03 03:56:39 +00:00
jmp L24A3
2018-03-03 17:04:07 +00:00
: lda open_params_ref_num
sta read_params_ref_num
MLI_CALL READ, read_params
beq :+
2018-03-03 06:44:28 +00:00
jmp L24A3
2018-03-03 17:04:07 +00:00
: MLI_CALL CLOSE, close_params
beq :+
2018-03-03 03:56:39 +00:00
jmp L24A3
2018-03-03 17:04:07 +00:00
: jmp sys_start
DEFINE_OPEN_PARAMS open_params, filename, $800
open_params_ref_num := open_params::ref_num
DEFINE_READ_PARAMS read_params, sys_start, MLI - sys_start
read_params_ref_num := read_params::ref_num
DEFINE_CLOSE_PARAMS close_params
filename: PASCAL_STRING "FILER"
.endproc
;;; ============================================================
2018-03-04 19:35:04 +00:00
.org (saved_org + .sizeof(launch_filer))
2018-03-03 03:56:39 +00:00
2018-03-03 04:22:09 +00:00
L2BE1: .byte $00
L2BE2: .byte $00
2018-03-03 17:04:07 +00:00
L2BE3: .byte $00
DEFINE_WRITE_BLOCK_PARAMS write_block_params, $2C00, 0
write_block_params_unit_num := write_block_params::unit_num
DEFINE_WRITE_BLOCK_PARAMS write_block_params2, $2E00, 1
write_block_params2_unit_num := write_block_params2::unit_num
PAD_TO $2C00
2018-03-03 03:56:39 +00:00
2018-03-03 04:32:55 +00:00
;;; ============================================================
.assert * = $2C00, error, "Segment length mismatch"
.incbin "inc/pdload.dat"
.assert * = $3000, error, "Segment length mismatch"
;;; ============================================================
2018-03-03 03:56:39 +00:00
2018-03-03 04:06:58 +00:00
L3000: jsr SLOT3ENTRY
2018-03-03 03:56:39 +00:00
jsr HOME
2018-03-04 19:35:04 +00:00
lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
lda $D3FF
pha
2018-03-04 19:35:04 +00:00
lda ROMIN2
2018-03-03 03:56:39 +00:00
pla
bne L3019
jmp L3880
2018-03-04 19:35:04 +00:00
L3019: lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
ldx #$17
lda #$00
L3023: sta $D395,x
dex
bpl L3023
2018-03-04 19:35:04 +00:00
lda ROMIN2
2018-03-03 03:56:39 +00:00
jsr L37FF
beq L3034
jmp L30B8
L3034: lda #$00
sta L30BB
L3039: lda L30BB
cmp $4400
beq L3071
jsr L37C5
2018-03-03 03:57:30 +00:00
stax $06
2018-03-03 03:56:39 +00:00
ldy #$0F
lda ($06),y
bne L306B
lda L30BB
jsr L37D2
jsr L38B2
jsr L3489
2018-03-04 19:35:04 +00:00
lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
ldx L30BB
lda #$FF
sta $D395,x
2018-03-04 19:35:04 +00:00
lda ROMIN2
2018-03-03 03:56:39 +00:00
L306B: inc L30BB
jmp L3039
L3071: lda #$00
sta L30BB
L3076: lda L30BB
cmp $4401
beq L30B8
clc
adc #$08
jsr L37C5
2018-03-03 03:57:30 +00:00
stax $06
2018-03-03 03:56:39 +00:00
ldy #$0F
lda ($06),y
bne L30B2
lda L30BB
clc
adc #$08
jsr L37D2
jsr L38B2
jsr L3489
2018-03-04 19:35:04 +00:00
lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
lda L30BB
clc
adc #$08
tax
lda #$FF
sta $D395,x
2018-03-04 19:35:04 +00:00
lda ROMIN2
2018-03-03 03:56:39 +00:00
L30B2: inc L30BB
jmp L3076
L30B8: jmp L3880
2018-03-04 02:39:21 +00:00
L30BB: .byte $00
2018-03-04 05:33:40 +00:00
DEFINE_OPEN_PARAMS open_params6, path_buf2, $0800
2018-03-04 03:15:47 +00:00
DEFINE_READ_PARAMS read_params4, $30CA, $4
.byte $00
2018-03-03 04:22:09 +00:00
.byte $00,$00,$00
2018-03-04 02:39:21 +00:00
DEFINE_CLOSE_PARAMS close_params5
2018-03-04 03:27:31 +00:00
DEFINE_READ_PARAMS read_params5, L3150, $27
DEFINE_READ_PARAMS read_params6, L30E0, $5
2018-03-04 03:15:47 +00:00
L30E0: .byte $00,$00,$00,$00,$00,$00
2018-03-03 04:22:09 +00:00
.byte $00,$00,$00
2018-03-04 02:39:21 +00:00
DEFINE_CLOSE_PARAMS close_params7
DEFINE_CLOSE_PARAMS close_params6
.byte $01,$C9,$31
2018-03-04 05:33:40 +00:00
DEFINE_OPEN_PARAMS open_params7, path_buf2, $0D00
DEFINE_OPEN_PARAMS open_params8, path_buf1, $1C00
2018-03-04 03:15:47 +00:00
DEFINE_READ_PARAMS read_params7, $1100, $0B00
2018-03-04 03:27:31 +00:00
DEFINE_WRITE_PARAMS write_params3, $1100, $0B00
2018-03-04 03:43:41 +00:00
DEFINE_CREATE_PARAMS create_params3, $3188, $C3
DEFINE_CREATE_PARAMS create_params2, $3188, 0
L3124: .byte $00,$00
2018-03-04 04:03:42 +00:00
2018-03-04 05:33:40 +00:00
DEFINE_GET_FILE_INFO_PARAMS get_file_info_params2, path_buf2
2018-03-04 04:03:42 +00:00
.byte $00
DEFINE_GET_FILE_INFO_PARAMS get_file_info_params3, $3188
.byte $00,$02,$00,$00,$00
2018-03-04 03:27:31 +00:00
2018-03-03 04:22:09 +00:00
L3150: .byte $00
L3151: .byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00
L3160: .byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $40,$35,$3D,$35,$86,$31,$60,$00
2018-03-04 03:27:31 +00:00
;; pathname buffer
2018-03-04 05:33:40 +00:00
path_buf1: .res 65, 0
2018-03-04 03:27:31 +00:00
;; pathname buffer
2018-03-04 05:33:40 +00:00
path_buf2: .res 65, 0
2018-03-04 03:27:31 +00:00
L320A: .res 64, 0
L324A: .res 64, 0
2018-03-03 04:22:09 +00:00
L328A: .byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
L329A: .byte $00
2018-03-03 03:56:39 +00:00
L329B: .byte $0D
2018-03-03 04:22:09 +00:00
L329C: .byte $00
L329D: .byte $00
L329E: .byte $00
L329F: .byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00
L3349: .byte $00
L334A: .byte $00
2018-03-03 03:56:39 +00:00
L334B: ldx L3349
lda L329E
sta L329F,x
inx
stx L3349
rts
L3359: ldx L3349
dex
lda L329F,x
sta L329E
stx L3349
rts
L3367: lda #$00
sta L329C
sta L334A
2018-03-04 02:39:21 +00:00
MLI_CALL OPEN, open_params6
2018-03-03 06:44:28 +00:00
beq L337A
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-04 02:39:21 +00:00
L337A: lda open_params6::ref_num
2018-03-03 03:56:39 +00:00
sta L329D
2018-03-04 03:15:47 +00:00
sta read_params4::ref_num
MLI_CALL READ, read_params4
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-03 06:44:28 +00:00
: jsr L33A4
2018-03-03 03:56:39 +00:00
rts
L3392: lda L329D
2018-03-04 02:39:21 +00:00
sta close_params5::ref_num
MLI_CALL CLOSE, close_params5
2018-03-03 03:56:39 +00:00
beq L33A3
jmp L3A43
L33A3: rts
L33A4: inc L329C
lda L329D
2018-03-04 03:15:47 +00:00
sta read_params5::ref_num
MLI_CALL READ, read_params5
2018-03-03 03:56:39 +00:00
beq L33B8
jmp L3A43
L33B8: inc L334A
lda L334A
cmp L329B
bcc L33E0
lda #$00
2018-03-03 16:26:04 +00:00
sta L334A
2018-03-03 03:56:39 +00:00
lda L329D
2018-03-04 03:15:47 +00:00
sta read_params6::ref_num
MLI_CALL READ, read_params6
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-04 03:15:47 +00:00
: lda read_params6::trans_count
cmp read_params6::request_count
2018-03-03 03:56:39 +00:00
rts
2018-03-03 03:57:30 +00:00
L33E0: return #$00
2018-03-03 03:56:39 +00:00
L33E3: lda L329C
sta L329E
jsr L3392
jsr L334B
jsr L36FB
jsr L3367
rts
L33F6: jsr L3392
jsr L346E
jsr L3720
jsr L3359
jsr L3367
jsr L340C
jsr L346B
rts
L340C: lda L329C
cmp L329E
beq L341A
jsr L33A4
jmp L340C
L341A: rts
L341B: lda #$00
sta L329A
jsr L3367
L3423: jsr L33A4
bne L3455
lda L3150
beq L3423
lda L3150
sta L346F
and #$0F
sta L3150
lda #$00
sta L3467
jsr L3468
lda L3467
bne L3423
lda L3160
cmp #$0F
bne L3423
jsr L33E3
inc L329A
jmp L3423
L3455: lda L329A
beq L3463
jsr L33F6
dec L329A
jmp L3423
L3463: jsr L3392
rts
2018-03-03 03:57:30 +00:00
L3467: .byte 0
2018-03-03 03:56:39 +00:00
L3468: jmp L3540
L346B: jmp L353D
L346E: rts
2018-03-03 03:57:30 +00:00
L346F: .byte 0
2018-03-03 03:56:39 +00:00
ldy #$00
L3472: lda $0200,y
cmp #$8D
beq L3482
and #$7F
2018-03-04 05:33:40 +00:00
sta path_buf2+1,y
2018-03-03 03:56:39 +00:00
iny
jmp L3472
2018-03-04 05:33:40 +00:00
L3482: sty path_buf2
2018-03-03 03:56:39 +00:00
rts
2018-03-03 03:57:30 +00:00
.byte 0
.byte 0
.byte 0
2018-03-03 03:56:39 +00:00
L3489: lda #$FF
sta L353B
jsr L3777
2018-03-04 05:33:40 +00:00
ldx path_buf1
2018-03-04 19:35:04 +00:00
lda #'/'
2018-03-04 05:33:40 +00:00
sta path_buf1+1,x
inc path_buf1
2018-03-03 03:56:39 +00:00
ldy #$00
2018-03-04 05:33:40 +00:00
ldx path_buf1
2018-03-03 03:56:39 +00:00
L34A1: iny
inx
lda L328A,y
2018-03-04 05:33:40 +00:00
sta path_buf1,x
2018-03-03 03:56:39 +00:00
cpy L328A
bne L34A1
2018-03-04 05:33:40 +00:00
stx path_buf1
2018-03-04 04:03:42 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params3
2018-03-04 19:35:04 +00:00
cmp #PDERR_FILE_NOT_FOUND
2018-03-03 16:26:04 +00:00
beq L34C4
2018-03-04 19:35:04 +00:00
cmp #PDERR_VOL_NOT_FOUND
2018-03-03 16:26:04 +00:00
beq L34C4
2018-03-04 19:35:04 +00:00
cmp #PDERR_PATH_NOT_FOUND
2018-03-03 03:56:39 +00:00
beq L34C4
rts
2018-03-04 04:03:42 +00:00
L34C4: MLI_CALL GET_FILE_INFO, get_file_info_params2
2018-03-03 16:26:04 +00:00
beq L34DD
2018-03-04 19:35:04 +00:00
cmp #PDERR_VOL_NOT_FOUND
2018-03-03 16:26:04 +00:00
beq L34D4
2018-03-04 19:35:04 +00:00
cmp #PDERR_FILE_NOT_FOUND
2018-03-03 03:56:39 +00:00
bne L34DA
2018-03-03 16:26:04 +00:00
L34D4: jsr L3A0A
2018-03-03 03:56:39 +00:00
jmp L34C4
L34DA: jmp L3A43
2018-03-04 04:03:42 +00:00
L34DD: lda get_file_info_params2::storage_type
2018-03-03 03:56:39 +00:00
cmp #$0F
beq L34EC
cmp #$0D
beq L34EC
lda #$00
beq L34EE
L34EC: lda #$FF
L34EE: sta L353A
2018-03-04 03:43:41 +00:00
;; copy file_type, aux_type, storage_type
ldy #7
2018-03-04 04:03:42 +00:00
: lda get_file_info_params2,y
2018-03-04 03:43:41 +00:00
sta create_params2,y
2018-03-03 03:56:39 +00:00
dey
2018-03-04 03:43:41 +00:00
cpy #3
bne :-
2018-03-03 03:56:39 +00:00
lda #$C3
2018-03-04 03:43:41 +00:00
sta create_params2::access
2018-03-03 03:56:39 +00:00
jsr L35A9
bcc L350B
jmp L3A29
L350B: ldx #$03
2018-03-04 04:03:42 +00:00
L350D: lda get_file_info_params2::create_date,x
2018-03-04 03:43:41 +00:00
sta create_params2::create_date,x
2018-03-03 03:56:39 +00:00
dex
bpl L350D
2018-03-04 03:43:41 +00:00
lda create_params2::storage_type
2018-03-03 03:56:39 +00:00
cmp #$0F
bne L3522
lda #$0D
2018-03-04 03:43:41 +00:00
sta create_params2::storage_type
L3522: MLI_CALL CREATE, create_params2
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-03 06:44:28 +00:00
: lda L353A
2018-03-03 03:56:39 +00:00
beq L3537
jmp L341B
2018-03-03 03:57:30 +00:00
.byte 0
2018-03-03 03:56:39 +00:00
rts
L3537: jmp L3643
2018-03-03 03:57:30 +00:00
L353A: .byte 0
L353B: .byte 0
L353C: .byte 0
2018-03-03 03:56:39 +00:00
L353D: jmp L375E
L3540: lda L3160
cmp #$0F
bne L3574
jsr L36FB
jsr L39EE
2018-03-04 04:03:42 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params2
2018-03-03 16:26:04 +00:00
beq L3566
jmp L3A43
2018-03-03 03:56:39 +00:00
L3558: jsr L375E
jsr L3720
lda #$FF
sta L3467
jmp L35A4
2018-03-03 16:26:04 +00:00
L3566: jsr L3739
2018-03-03 03:56:39 +00:00
jsr L36C1
bcs L3558
jsr L3720
jmp L35A4
L3574: jsr L3739
jsr L36FB
jsr L39EE
2018-03-04 04:03:42 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params2
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-03 06:44:28 +00:00
: jsr L35A9
2018-03-03 03:56:39 +00:00
bcc L3590
jmp L3A29
L3590: jsr L3720
jsr L36C1
bcs L35A5
jsr L36FB
jsr L3643
jsr L3720
jsr L375E
L35A4: rts
L35A5: jsr L375E
rts
2018-03-04 04:03:42 +00:00
L35A9: MLI_CALL GET_FILE_INFO, get_file_info_params2
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-03 06:44:28 +00:00
: lda #$00
2018-03-03 03:56:39 +00:00
sta L3641
sta L3642
2018-03-04 04:03:42 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params3
2018-03-03 06:44:28 +00:00
beq :+
2018-03-04 19:35:04 +00:00
cmp #PDERR_FILE_NOT_FOUND
2018-03-03 03:56:39 +00:00
beq L35D7
jmp L3A43
2018-03-04 04:03:42 +00:00
: copy16 get_file_info_params3::blocks_used, L3641
2018-03-04 05:33:40 +00:00
L35D7: lda path_buf1
2018-03-03 03:56:39 +00:00
sta L363F
ldy #$01
L35DF: iny
2018-03-04 05:33:40 +00:00
cpy path_buf1
2018-03-03 03:56:39 +00:00
bcs L3635
2018-03-04 05:33:40 +00:00
lda path_buf1,y
2018-03-04 19:35:04 +00:00
cmp #'/'
2018-03-03 03:56:39 +00:00
bne L35DF
tya
2018-03-04 05:33:40 +00:00
sta path_buf1
2018-03-03 03:56:39 +00:00
sta L3640
2018-03-04 04:03:42 +00:00
MLI_CALL GET_FILE_INFO, get_file_info_params3
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-04 04:03:42 +00:00
: sub16 get_file_info_params3::aux_type, get_file_info_params3::blocks_used, L363D
2018-03-03 03:57:30 +00:00
sub16 L363D, L3641, L363D
2018-03-04 04:03:42 +00:00
cmp16 L363D, get_file_info_params2::blocks_used
2018-03-03 03:56:39 +00:00
bcs L3635
sec
bcs L3636
L3635: clc
L3636: lda L363F
2018-03-04 05:33:40 +00:00
sta path_buf1
2018-03-03 03:56:39 +00:00
rts
2018-03-03 04:22:09 +00:00
L363D: .byte 0,0
2018-03-03 03:57:30 +00:00
L363F: .byte 0
L3640: .byte 0
L3641: .byte 0
L3642: .byte 0
2018-03-04 02:39:21 +00:00
L3643: MLI_CALL OPEN, open_params7
2018-03-03 03:56:39 +00:00
beq L364E
jsr L3A43
2018-03-04 02:39:21 +00:00
L364E: MLI_CALL OPEN, open_params8
2018-03-03 03:56:39 +00:00
beq L3659
jmp L3A43
2018-03-04 02:39:21 +00:00
L3659: lda open_params7::ref_num
2018-03-04 03:15:47 +00:00
sta read_params7::ref_num
2018-03-04 02:39:21 +00:00
sta close_params7::ref_num
lda open_params8::ref_num
2018-03-04 03:27:31 +00:00
sta write_params3::ref_num
2018-03-04 02:39:21 +00:00
sta close_params6::ref_num
2018-03-04 19:35:04 +00:00
2018-03-04 03:15:47 +00:00
L366B: copy16 #$0B00, read_params7::request_count
MLI_CALL READ, read_params7
2018-03-03 06:44:28 +00:00
beq :+
2018-03-04 19:35:04 +00:00
cmp #PDERR_END_OF_FILE
2018-03-03 03:56:39 +00:00
beq L36AE
jmp L3A43
2018-03-04 03:27:31 +00:00
: copy16 read_params7::trans_count, write_params3::request_count
2018-03-04 03:15:47 +00:00
ora read_params7::trans_count
2018-03-03 03:56:39 +00:00
beq L36AE
2018-03-04 03:27:31 +00:00
MLI_CALL WRITE, write_params3
2018-03-03 06:44:28 +00:00
beq :+
2018-03-03 03:56:39 +00:00
jmp L3A43
2018-03-04 03:27:31 +00:00
: lda write_params3::trans_count
cmp #<$0B00
2018-03-03 03:56:39 +00:00
bne L36AE
2018-03-04 03:27:31 +00:00
lda write_params3::trans_count+1
cmp #>$0B00
2018-03-03 03:56:39 +00:00
beq L366B
2018-03-04 02:39:21 +00:00
L36AE: MLI_CALL CLOSE, close_params6
MLI_CALL CLOSE, close_params7
2018-03-04 19:35:04 +00:00
jsr get_file_info_and_copy
jsr do_set_file_info
2018-03-03 03:56:39 +00:00
rts
2018-03-04 03:43:41 +00:00
;; copy file_type, aux_type, storage_type
L36C1: ldx #7
2018-03-04 04:03:42 +00:00
: lda get_file_info_params2,x
2018-03-04 03:43:41 +00:00
sta create_params3,x
2018-03-03 03:56:39 +00:00
dex
2018-03-04 03:43:41 +00:00
cpx #3
bne :-
2018-03-03 03:56:39 +00:00
lda #$C3
2018-03-04 03:43:41 +00:00
sta create_params3::access
2018-03-03 03:56:39 +00:00
ldx #$03
2018-03-04 04:03:42 +00:00
L36D5: lda get_file_info_params2::create_date,x
2018-03-04 03:43:41 +00:00
sta create_params3::create_date,x
2018-03-03 03:56:39 +00:00
dex
bpl L36D5
2018-03-04 03:43:41 +00:00
lda create_params3::storage_type
2018-03-03 03:56:39 +00:00
cmp #$0F
bne L36EA
lda #$0D
2018-03-04 03:43:41 +00:00
sta create_params3::storage_type
L36EA: MLI_CALL CREATE, create_params3
2018-03-03 06:44:28 +00:00
clc
2018-03-03 03:56:39 +00:00
beq L36F6
jmp L3A43
L36F6: rts
2018-03-03 03:57:30 +00:00
.byte 0
.byte 0
.byte 0
.byte 0
2018-03-03 03:56:39 +00:00
L36FB: lda L3150
bne L3701
rts
L3701: ldx #$00
2018-03-04 05:33:40 +00:00
ldy path_buf2
2018-03-04 19:35:04 +00:00
lda #'/'
2018-03-04 05:33:40 +00:00
sta path_buf2+1,y
2018-03-03 03:56:39 +00:00
iny
L370C: cpx L3150
bcs L371C
lda L3151,x
2018-03-04 05:33:40 +00:00
sta path_buf2+1,y
2018-03-03 03:56:39 +00:00
inx
iny
jmp L370C
2018-03-04 05:33:40 +00:00
L371C: sty path_buf2
2018-03-03 03:56:39 +00:00
rts
2018-03-04 05:33:40 +00:00
L3720: ldx path_buf2
2018-03-03 03:56:39 +00:00
bne L3726
rts
2018-03-04 05:33:40 +00:00
L3726: lda path_buf2,x
2018-03-04 19:35:04 +00:00
cmp #'/'
2018-03-03 03:56:39 +00:00
beq L3734
dex
bne L3726
2018-03-04 05:33:40 +00:00
stx path_buf2
2018-03-03 03:56:39 +00:00
rts
L3734: dex
2018-03-04 05:33:40 +00:00
stx path_buf2
2018-03-03 03:56:39 +00:00
rts
L3739: lda L3150
bne L373F
rts
L373F: ldx #$00
2018-03-04 05:33:40 +00:00
ldy path_buf1
2018-03-04 19:35:04 +00:00
lda #'/'
2018-03-04 05:33:40 +00:00
sta path_buf1+1,y
2018-03-03 03:56:39 +00:00
iny
L374A: cpx L3150
bcs L375A
lda L3151,x
2018-03-04 05:33:40 +00:00
sta path_buf1+1,y
2018-03-03 03:56:39 +00:00
inx
iny
jmp L374A
2018-03-04 05:33:40 +00:00
L375A: sty path_buf1
2018-03-03 03:56:39 +00:00
rts
2018-03-04 05:33:40 +00:00
L375E: ldx path_buf1
2018-03-03 03:56:39 +00:00
bne L3764
rts
2018-03-04 05:33:40 +00:00
L3764: lda path_buf1,x
2018-03-04 19:35:04 +00:00
cmp #'/'
2018-03-03 03:56:39 +00:00
beq L3772
dex
bne L3764
2018-03-04 05:33:40 +00:00
stx path_buf1
2018-03-03 03:56:39 +00:00
rts
L3772: dex
2018-03-04 05:33:40 +00:00
stx path_buf1
2018-03-03 03:56:39 +00:00
rts
L3777: ldy #$00
sta L353C
dey
L377D: iny
lda L324A,y
2018-03-04 19:35:04 +00:00
cmp #'/'
2018-03-03 03:56:39 +00:00
bne L3788
sty L353C
2018-03-04 05:33:40 +00:00
L3788: sta path_buf2,y
2018-03-03 03:56:39 +00:00
cpy L324A
bne L377D
ldy L320A
L3793: lda L320A,y
2018-03-04 05:33:40 +00:00
sta path_buf1,y
2018-03-03 03:56:39 +00:00
dey
bpl L3793
rts
2018-03-04 19:35:04 +00:00
.proc do_set_file_info
lda #7 ; SET_FILE_INFO param_count
2018-03-04 04:03:42 +00:00
sta get_file_info_params3
MLI_CALL SET_FILE_INFO, get_file_info_params3
2018-03-04 19:35:04 +00:00
lda #10 ; GET_FILE_INFO param_count
2018-03-04 04:03:42 +00:00
sta get_file_info_params3
2018-03-03 03:56:39 +00:00
rts
2018-03-04 19:35:04 +00:00
.endproc
2018-03-03 03:56:39 +00:00
2018-03-04 19:35:04 +00:00
.proc get_file_info_and_copy
MLI_CALL GET_FILE_INFO, get_file_info_params2
bne fail
2018-03-03 03:56:39 +00:00
ldx #$0A
2018-03-04 19:35:04 +00:00
: lda get_file_info_params2::access,x
2018-03-04 04:03:42 +00:00
sta get_file_info_params3::access,x
2018-03-03 03:56:39 +00:00
dex
2018-03-04 19:35:04 +00:00
bpl :-
2018-03-03 03:56:39 +00:00
rts
2018-03-04 19:35:04 +00:00
fail: pla
2018-03-03 03:56:39 +00:00
pla
rts
2018-03-04 19:35:04 +00:00
.endproc
2018-03-03 03:56:39 +00:00
L37C5: jsr L381C
clc
adc #$02
tay
txa
adc #$44
tax
tya
rts
L37D2: jsr L3836
clc
adc #$82
tay
txa
adc #$45
tax
tya
rts
2018-03-04 02:39:21 +00:00
.byte $00,$00
2018-03-03 16:26:04 +00:00
2018-03-04 03:27:31 +00:00
DEFINE_OPEN_PARAMS open_params9, str_selector_list, $4000
str_selector_list:
PASCAL_STRING "Selector.List"
DEFINE_READ_PARAMS read_params8, $4400, $0800
2018-03-04 02:39:21 +00:00
DEFINE_CLOSE_PARAMS close_params8
2018-03-03 16:26:04 +00:00
2018-03-04 02:39:21 +00:00
L37FF: MLI_CALL OPEN, open_params9
2018-03-03 03:56:39 +00:00
bne L381B
2018-03-04 02:39:21 +00:00
lda open_params9::ref_num
2018-03-04 03:15:47 +00:00
sta read_params8::ref_num
MLI_CALL READ, read_params8
2018-03-04 02:39:21 +00:00
MLI_CALL CLOSE, close_params8
2018-03-03 03:56:39 +00:00
lda #$00
L381B: rts
L381C: ldx #$00
stx L3835
asl a
rol L3835
asl a
rol L3835
asl a
rol L3835
asl a
rol L3835
ldx L3835
rts
2018-03-03 03:57:30 +00:00
L3835: .byte 0
2018-03-03 03:56:39 +00:00
L3836: ldx #$00
stx L3857
asl a
rol L3857
asl a
rol L3857
asl a
rol L3857
asl a
rol L3857
asl a
rol L3857
asl a
rol L3857
ldx L3857
rts
2018-03-04 02:39:21 +00:00
L3857: .byte $00
2018-03-04 03:43:41 +00:00
DEFINE_OPEN_PARAMS open_params11, str_desktop2, $5000
DEFINE_OPEN_PARAMS open_params10, str_selector, $5400
2018-03-04 03:15:47 +00:00
DEFINE_READ_PARAMS read_params9, $2000, $0400
2018-03-04 02:39:21 +00:00
DEFINE_CLOSE_PARAMS close_params9
2018-03-04 03:43:41 +00:00
str_selector:
2018-03-03 04:53:10 +00:00
PASCAL_STRING "Selector"
2018-03-04 03:43:41 +00:00
str_desktop2:
2018-03-03 04:53:10 +00:00
PASCAL_STRING "DeskTop2"
2018-03-04 02:39:21 +00:00
L3880: MLI_CALL CLOSE, close_params9
MLI_CALL OPEN, open_params10
2018-03-03 06:44:28 +00:00
beq :+
2018-03-04 02:39:21 +00:00
MLI_CALL OPEN, open_params11
2018-03-03 03:56:39 +00:00
beq L3897
2018-03-03 06:44:28 +00:00
brk
2018-03-04 02:39:21 +00:00
L3897: lda open_params11::ref_num
2018-03-03 03:56:39 +00:00
jmp L38A0
2018-03-04 02:39:21 +00:00
: lda open_params10::ref_num
2018-03-04 03:15:47 +00:00
L38A0: sta read_params9::ref_num
MLI_CALL READ, read_params9
2018-03-04 03:27:31 +00:00
MLI_CALL CLOSE, close_params9
2018-03-03 03:56:39 +00:00
jmp L2000
2018-03-03 03:57:30 +00:00
L38B2: stax $06
2018-03-03 03:56:39 +00:00
ldy #$00
lda ($06),y
tay
L38BB: lda ($06),y
sta L324A,y
dey
bpl L38BB
ldy L324A
L38C6: lda L324A,y
and #$7F
2018-03-04 19:35:04 +00:00
cmp #'/'
2018-03-03 03:56:39 +00:00
beq L38D2
dey
bne L38C6
L38D2: dey
sty L324A
L38D6: lda L324A,y
and #$7F
2018-03-04 19:35:04 +00:00
cmp #'/'
2018-03-03 03:56:39 +00:00
beq L38E2
dey
bpl L38D6
L38E2: ldx #$00
L38E4: iny
inx
lda L324A,y
sta L328A,x
cpy L324A
bne L38E4
stx L328A
2018-03-04 19:35:04 +00:00
lda LCBANK2
lda LCBANK2
2018-03-03 03:56:39 +00:00
ldy $D3EE
L38FD: lda $D3EE,y
sta L320A,y
dey
bpl L38FD
2018-03-03 06:44:28 +00:00
lda ROMIN2
rts
2018-03-03 03:56:39 +00:00
2018-03-04 04:03:42 +00:00
str_copying:
2018-03-03 04:53:10 +00:00
PASCAL_STRING "Copying:"
2018-03-04 04:03:42 +00:00
str_insert:
2018-03-03 04:53:10 +00:00
PASCAL_STRING "Insert the source disk and press <Return> to continue or <ESC> to cancel"
2018-03-04 04:03:42 +00:00
str_not_enough:
2018-03-03 04:53:10 +00:00
PASCAL_STRING "Not enough room in the RAMCard, press <Return> to continue"
2018-03-04 04:03:42 +00:00
str_error:
2018-03-03 04:53:10 +00:00
PASCAL_STRING "Error $"
2018-03-04 04:03:42 +00:00
str_occured:
2018-03-03 04:53:10 +00:00
PASCAL_STRING " occured when copying "
2018-03-04 04:03:42 +00:00
str_not_completed:
2018-03-03 04:53:10 +00:00
PASCAL_STRING "The copy was not completed, press <Return> to continue."
2018-03-04 04:03:42 +00:00
2018-03-03 03:56:39 +00:00
L39EE: jsr HOME
lda #$00
2018-03-03 04:06:58 +00:00
jsr VTABZ
2018-03-03 03:56:39 +00:00
lda #$00
jsr L3ABC
2018-03-04 05:33:40 +00:00
addr_call cout_string, str_copying
addr_call cout_string_newline, path_buf2
2018-03-03 03:56:39 +00:00
rts
L3A0A: lda #$00
2018-03-03 04:06:58 +00:00
jsr VTABZ
2018-03-03 03:56:39 +00:00
lda #$00
jsr L3ABC
2018-03-04 05:33:40 +00:00
addr_call cout_string, str_insert
jsr wait_enter_escape
cmp #CHAR_ESCAPE
2018-03-03 03:56:39 +00:00
bne L3A25
jmp L3AD2
L3A25: jsr HOME
rts
L3A29: lda #$00
2018-03-03 04:22:09 +00:00
jsr VTABZ
2018-03-03 03:56:39 +00:00
lda #$00
jsr L3ABC
2018-03-04 05:33:40 +00:00
addr_call cout_string, str_not_enough
jsr wait_enter_escape
2018-03-03 03:56:39 +00:00
jsr HOME
jmp L3880
2018-03-04 19:35:04 +00:00
L3A43: cmp #PDERR_OVERRUN_ERROR
2018-03-03 04:22:09 +00:00
bne L3A4D
2018-03-03 03:56:39 +00:00
jsr L3A29
jmp L3AD2
2018-03-04 19:35:04 +00:00
L3A4D: cmp #PDERR_VOLUME_DIR_FULL
bne show_error
2018-03-03 03:56:39 +00:00
jsr L3A29
jmp L3AD2
2018-03-04 19:35:04 +00:00
.proc show_error
;; Show error
pha
2018-03-04 05:33:40 +00:00
addr_call cout_string, str_error
2018-03-03 03:56:39 +00:00
pla
2018-03-03 04:06:58 +00:00
jsr PRBYTE
2018-03-04 05:33:40 +00:00
addr_call cout_string, str_occured
addr_call cout_string_newline, path_buf2
addr_call cout_string, str_not_completed
2018-03-04 19:35:04 +00:00
;; Wait for keyboard
2018-03-04 05:33:40 +00:00
sta KBDSTRB
2018-03-04 19:35:04 +00:00
loop: lda KBD
bpl loop
2018-03-03 03:56:39 +00:00
and #$7F
2018-03-04 05:33:40 +00:00
sta KBDSTRB
2018-03-04 19:35:04 +00:00
cmp #'M'
2018-03-03 03:56:39 +00:00
beq L3A97
2018-03-04 19:35:04 +00:00
cmp #'m'
2018-03-03 03:56:39 +00:00
beq L3A97
2018-03-04 19:35:04 +00:00
cmp #CHAR_RETURN
bne loop
2018-03-03 03:56:39 +00:00
jsr HOME
jmp L3880
2018-03-04 19:35:04 +00:00
.endproc
2018-03-03 03:56:39 +00:00
2018-03-03 04:06:58 +00:00
L3A97: jmp MONZ
2018-03-03 03:56:39 +00:00
2018-03-04 19:35:04 +00:00
;;; ============================================================
2018-03-04 05:33:40 +00:00
.proc cout_string_newline
jsr cout_string
lda #$80|CHAR_RETURN
2018-03-03 03:56:39 +00:00
jmp COUT
2018-03-04 05:33:40 +00:00
;; fall through
.endproc
2018-03-03 03:56:39 +00:00
2018-03-04 05:33:40 +00:00
.proc cout_string
ptr := $6
stax ptr
ldy #0
lda (ptr),y
sta len
beq done
loop: iny
2018-03-03 03:56:39 +00:00
lda ($06),y
ora #$80
jsr COUT
2018-03-04 05:33:40 +00:00
len := *+1
2018-03-04 19:35:04 +00:00
cpy #0 ; self-modified
2018-03-04 05:33:40 +00:00
bne loop
done: rts
.endproc
2018-03-03 03:56:39 +00:00
L3ABC: sta $24
rts
2018-03-04 05:33:40 +00:00
;;; ============================================================
.proc wait_enter_escape
lda KBD
bpl wait_enter_escape
sta KBDSTRB
2018-03-03 03:56:39 +00:00
and #$7F
2018-03-04 05:33:40 +00:00
cmp #CHAR_ESCAPE
beq done
cmp #CHAR_RETURN
bne wait_enter_escape
done: rts
.endproc
;;; ============================================================
2018-03-03 03:56:39 +00:00
L3AD2: jsr HOME
jmp L3880
2018-03-04 19:35:04 +00:00
L3AD8: .byte 0 ; ???
2018-03-03 03:56:39 +00:00
.byte $02
2018-03-04 19:35:04 +00:00
L3ADA: iny
2018-03-03 03:56:39 +00:00
inx
dec $0200
bne L3AD2
lda #$A2
sta $0200
rts
2018-03-04 19:35:04 +00:00
.endproc ; bootstrap
;;; ============================================================
;;; ??? Is this relocated? Part of ProDOS? RAMCard driver?
.proc WTF
L400C := $400C
L402B := $402B
L402C := $402C
L9F8C := $9F8C
L9FAB := $9FAB
L9FB0 := $9FB0
LA1F5 := $A1F5
LA24C := $A24C
LA62F := $A62F
LA66C := $A66C
LAB37 := $AB37
LAD46 := $AD46
LB1A0 := $B1A0
LB245 := $B245
LB2FB := $B2FB
LB3EB := $B3EB
LB41F := $B41F
LB462 := $B462
LB4A5 := $B4A5
LB522 := $B522
LB666 := $B666
LB7D0 := $B7D0
LBE50 := $BE50
LBE70 := $BE70
L3AB7 := $3AB7 ; This can't be right
2018-03-03 03:57:30 +00:00
copy16 #$BCBD, $BEC8
2018-03-04 05:33:40 +00:00
lda DEVNUM
2018-03-03 03:56:39 +00:00
sta $BEC7
lda #$C5
jsr LBE70
2018-03-04 19:35:04 +00:00
bcs L3AB7
2018-03-03 03:56:39 +00:00
lda $BCBD
and #$0F
tax
inx
stx $BCBC
lda #$AF
sta $BCBD
jsr LB7D0
2018-03-04 19:35:04 +00:00
bcs L3AB7
2018-03-03 03:56:39 +00:00
jsr LA66C
ldx #$36
jsr L9FB0
jsr LAB37
lda $BEB9
ldx $BEBA
ldy #$3D
jsr LA62F
lda $BEBC
ldx $BEBD
ldy #$26
jsr LA62F
lda $BEB9
sec
sbc $BEBC
pha
lda $BEBA
sbc $BEBD
tax
pla
ldy #$10
jsr LA62F
clc
rts
2018-03-03 03:57:30 +00:00
ldax #$0F01
2018-03-03 03:56:39 +00:00
ldy $BEBB
cpy #$0F
bne L3B58
stx $BEB8
L3B58: jsr LB1A0
bcs L3B93
2018-03-03 03:57:30 +00:00
copy16 #$0259, $BED7
copy16 #$002B, $BED9
2018-03-03 03:56:39 +00:00
lda #$CA
jsr LBE70
bcs L3B93
ldx #$03
L3B7A: lda $027C,x
sta $BCB7,x
dex
bpl L3B7A
sta $BED9
lda #$01
sta $BCBB
lda #$00
sta $BEC9
sta $BECA
L3B93: rts
pha
lda $BE56
and #$04
beq L3B9F
ldx $BE6A
L3B9F: pla
cpx $BEB8
bne L3BC9
and $BEB7
beq L3BCD
lda $BC88
sta $BECF
lda #$0F
2018-03-04 05:33:40 +00:00
sta LEVEL
2018-03-03 03:56:39 +00:00
lda #$C8
jsr LBE70
bcs L3BC8
lda $BED0
sta $BED6
sta $BEDE
sta $BEC7
L3BC8: rts
L3BC9: lda #$0D
sec
rts
L3BCD: lda #$0A
sec
rts
L3BD1: lda $BEC9
and #$FE
sta $BEC9
ldy $BCBB
lda #$00
cpy $BCB8
bcc L3BED
tay
sty $BCBB
inc $BEC9
L3BEA: inc $BEC9
L3BED: dey
clc
bmi L3BF8
adc $BCB7
bcc L3BED
bcs L3BEA
L3BF8: adc #$04
sta $BEC8
lda #$CE
jsr LBE70
bcs L3C1D
lda #$CA
jsr LBE70
bcs L3C1D
inc $BCBB
lda $0259
and #$F0
beq L3BD1
dec $BCB9
bne L3C1D
dec $BCBA
L3C1D: rts
jmp (LBE50)
jsr LB41F
bcs L3C50
bit $BE4E
bpl L3C4C
sta $BEC7
lda #$00
sta $BEC8
sta $BEC9
sta $BECA
lda #$CE
jsr LBE70
bcs L3C45
lda $BEC7
bne L3CC3
L3C45: pha
jsr LB2FB
pla
sec
rts
L3C4C: lda #$14
sec
rts
L3C50: bit $BE43
bpl L3C5A
jsr LB2FB
bcs L3C63
L3C5A: lda $BEB8
cmp #$04
beq L3C65
lda #$0D
L3C63: sec
rts
L3C65: jsr LA1F5
bcs L3C63
lda #$00
sta $BEC8
lda $BC88
sta $BEC9
ldx $BE4D
beq L3C9E
tay
txa
asl a
asl a
adc $BC88
pha
L3C82: cmp $BC93,x
beq L3C8B
dex
bne L3C82
2018-03-03 03:57:30 +00:00
.byte 0
2018-03-03 03:56:39 +00:00
L3C8B: tya
sta $BC93,x
lda $BC9B,x
sta $BEC7
lda #$D2
jsr LBE70
bcc L3C9D
2018-03-03 03:57:30 +00:00
.byte 0
2018-03-03 03:56:39 +00:00
L3C9D: pla
L3C9E: sta $BC88
sta $BECF
lda #$00
2018-03-04 05:33:40 +00:00
sta LEVEL
2018-03-03 03:56:39 +00:00
lda #$C8
jsr LBE70
bcc L3CB7
pha
jsr LA24C
pla
sec
rts
L3CB7: ldx $BECF
stx $BC9B
lda $BED0
sta $BCA3
L3CC3: sta $BED6
sta $BEC7
sta $BED2
ldx $BEB9
stx $BE5F
ldx $BEBA
stx $BE60
jsr LB3EB
lda #$7F
sta $BED3
lda #$C9
jsr LBE70
lda $BE57
and #$03
beq L3CF4
jsr LB522
bcc L3CF4
jmp LB245
L3CF4: lda #$FF
sta $BE43
clc
rts
lda $BE43
bpl L3D0B
sta $BE4E
ldx #$08
lda $BC9B,x
jsr LB4A5
L3D0B: rts
bcs L3D47
lda $BE56
and #$01
bne L3D1D
ldx #$00
jsr L9F8C
jsr L9FAB
L3D1D: clc
rts
lda #$00
beq L3D2F
lda $BE56
and #$01
beq L3D2F
jsr LB41F
bcs L3D37
L3D2F: sta $BEDE
lda #$CD
jsr LBE70
L3D37: rts
php
jsr LB41F
bcs L3D4B
plp
lda #$14
sec
rts
L3D43: lda #$0D
sec
rts
L3D47: lda #$06
L3D49: sec
rts
L3D4B: plp
ldx #$00
ldy #$00
lda $BE57
and #$10
bne L3D5D
stx $BE60
sty $BE5F
L3D5D: lda $BE56
and #$04
eor #$04
beq L3D6B
lda #$04
sta $BE6A
L3D6B: bcc L3D8E
beq L3D47
sta $BEB8
lda #$C3
sta $BEB7
ldx $BE60
ldy $BE5F
stx $BEA6
stx $BEBA
sty $BEA5
sty $BEB9
jsr LAD46
bcs L3D49
L3D8E: lda $BEB8
cmp $BE6A
bne L3D43
cmp #$04
bne L3DAD
ldx $BEBA
ldy $BEB9
lda $BE57
and #$10
bne L3DAD
stx $BE60
sty $BE5F
L3DAD: jsr LA1F5
bcs L3D49
lda $BC88
sta $BECF
lda #$07
2018-03-04 05:33:40 +00:00
sta LEVEL
2018-03-03 03:56:39 +00:00
lda #$C8
jsr LBE70
bcc L3DCB
pha
jsr LA24C
pla
sec
rts
L3DCB: lda $BEB8
cmp #$0F
beq L3DD3
clc
L3DD3: lda #$00
ror a
sta $BE47
ldx $BE4D
lda $BC88
sta $BC94,x
lda $BED0
sta $BC9C,x
inc $BE4D
asl a
asl a
asl a
asl a
asl a
tax
lda $0280
ora $BE47
sta $BCFE,x
and #$7F
tay
cmp #$1E
bcc L3E03
lda #$1D
L3E03: sta $3A
lda $BE5F
sta $BCFF,x
lda $BE60
sta $BD00,x
L3E11: inx
lda $0280,y
sta $BD00,x
dey
dec $3A
bne L3E11
clc
rts
lda $BE56
and #$01
bne L3E2A
lda #$10
sec
rts
L3E2A: ldx $BE4D
beq L3E48
stx $BE4E
L3E32: stx $3B
lda $BC9B,x
jsr LB462
bne L3E43
ldx $3B
L3E3E: lda $BC9B,x
L3E41: clc
rts
L3E43: ldx $3B
dex
bne L3E32
L3E48: lda $BE43
bpl L3E5E
lda $BCA3
jsr LB462
bne L3E5E
lda #$FF
sta $BE4E
ldx #$08
bne L3E3E
L3E5E: lda #$12
sec
rts
asl a
asl a
asl a
asl a
asl a
tax
lda $BCFE,x
sta $BE47
and #$7F
cmp $0280
bne L3E98
tay
cmp #$1E
bcc L3E7C
lda #$1D
L3E7C: sta $3A
lda $BCFF,x
sta $BCA4
lda $BD00,x
sta $BCA5
L3E8A: inx
lda $0280,y
cmp $BD00,x
bne L3E98
dey
dec $3A
bne L3E8A
L3E98: rts
lda $BE56
and #$01
beq L3EF2
jsr LB41F
bcs L3E41
sta $BEDE
lda $BC93,x
sta $BC88
bit $BE4E
bmi L3ECF
ldy $BE4D
pha
lda $BC93,y
sta $BC93,x
pla
sta $BC93,y
lda $BC9B,x
pha
lda $BC9B,y
sta $BC9B,x
pla
sta $BC9B,y
L3ECF: lda #$00
2018-03-04 05:33:40 +00:00
sta LEVEL
2018-03-03 03:56:39 +00:00
lda #$CC
jsr LBE70
bcs L3F02
jsr LA24C
bit $BE4E
bpl L3EEE
pha
lda #$00
sta $BE43
sta $BE4E
pla
rts
L3EEE: dec $BE4D
rts
L3EF2: ldx $BE4D
beq L3F03
stx $BE4E
lda $BC9B,x
jsr LB4A5
bcc L3EF2
L3F02: rts
L3F03: lda #$00
sta $BEDE
lda #$07
2018-03-04 05:33:40 +00:00
sta LEVEL
2018-03-03 03:56:39 +00:00
lda #$CC
jmp LBE70
jsr LB41F
bcs L3F7F
sta $BED6
sta $BED2
bit $BE47
bmi L3F80
.byte $AD
.byte $57
2018-03-03 04:32:55 +00:00
ldx $0329,y
2018-03-03 03:56:39 +00:00
beq L3F7D
cmp #$03
beq L3F7D
and #$01
beq L3F3D
2018-03-03 03:57:30 +00:00
copy16 $BE65, $BE63
L3F3D: copy16 #$00EF, $BED9
2018-03-03 03:56:39 +00:00
sta $BED7
lda #$02
sta $BED8
lda #$7F
sta $BED3
lda #$C9
jsr LBE70
bcs L3F7F
L3F5B: lda $BE63
ora $BE64
clc
beq L3F80
lda #$CA
jsr LBE70
bcs L3F7F
lda $BE63
sbc #$00
sta $BE63
lda $BE64
sbc #$00
sta $BE64
bcs L3F5B
L3F7D: lda #$0B
L3F7F: sec
L3F80: rts
2018-03-03 03:57:30 +00:00
copy16 $BCA4, $BCAF
2018-03-03 03:56:39 +00:00
lda #$00
sta $BCB1
sta $BCB2
sta $BEC8
sta $BEC9
sta $BECA
2018-03-03 03:57:30 +00:00
L3F9E: lsr16 $BE65
2018-03-03 03:56:39 +00:00
ldx #$00
bcc L3FBF
clc
L3FA9: lda $BCAF,x
adc $BEC8,x
sta $BEC8,x
inx
txa
eor #$03
bne L3FA9
bcs L3FD2
ldx $BCB2
bne L3FD2
L3FBF: rol $BCAF,x
inx
txa
eor #$04
bne L3FBF
lda $BE65
ora $BE66
bne L3F9E
clc
rts
L3FD2: lda #$02
sec
rts
jsr LB41F
bcs L402B
sta $BED6
sta $BEC7
sta $BED2
bit $BE47
bmi L402C
jsr LB666
bcs L402B
ldx #$7F
ldy #$EF
lda $BE57
and #$10
beq L400C
ldy $BE5F
ldx $BE60
.byte $D0
2018-03-04 19:35:04 +00:00
.endproc ; WTF