mirror of
https://github.com/mi57730/a2d.git
synced 2025-02-18 02:30:50 +00:00
macros for ProDOS MLI params
This commit is contained in:
parent
aa8e79e944
commit
5cc74da7ec
@ -33,13 +33,7 @@ loop: lda src,y
|
|||||||
|
|
||||||
MLI_CALL QUIT, quit_params
|
MLI_CALL QUIT, quit_params
|
||||||
|
|
||||||
.proc quit_params
|
DEFINE_QUIT_PARAMS quit_params
|
||||||
params: .byte 4
|
|
||||||
.byte 0
|
|
||||||
.word 0
|
|
||||||
.byte 0
|
|
||||||
.word 0
|
|
||||||
.endproc
|
|
||||||
.endproc ; install_as_quit
|
.endproc ; install_as_quit
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
@ -60,34 +54,13 @@ reinstall_flag: ; set once prefix saved and reinstalled
|
|||||||
splash_string:
|
splash_string:
|
||||||
PASCAL_STRING "Loading Apple II DeskTop"
|
PASCAL_STRING "Loading Apple II DeskTop"
|
||||||
|
|
||||||
pathname:
|
filename:
|
||||||
PASCAL_STRING "DeskTop2"
|
PASCAL_STRING "DeskTop2"
|
||||||
|
|
||||||
.proc read_params
|
DEFINE_READ_PARAMS read_params, $1E00, $400 ; so the $200 byte mark ends up at $2000
|
||||||
params: .byte 4
|
DEFINE_CLOSE_PARAMS close_params
|
||||||
ref_num:.byte 0
|
DEFINE_SET_PREFIX_PARAMS prefix_params, prefix_buffer
|
||||||
buffer: .addr $1E00 ; so the $200 byte mark ends up at $2000
|
DEFINE_OPEN_PARAMS open_params, filename, $1A00
|
||||||
request:.word $0400
|
|
||||||
trans: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc close_params
|
|
||||||
params: .byte 1
|
|
||||||
ref_num:.byte 0 ; close all
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc prefix_params
|
|
||||||
params: .byte 1
|
|
||||||
buffer: .addr prefix_buffer
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc open_params
|
|
||||||
params: .byte 3
|
|
||||||
path: .addr pathname
|
|
||||||
buffer: .addr $1A00
|
|
||||||
ref_num:.byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
|
|
||||||
start: lda ROMIN2
|
start: lda ROMIN2
|
||||||
|
|
||||||
@ -248,33 +221,14 @@ prefix_buffer:
|
|||||||
|
|
||||||
jmp start
|
jmp start
|
||||||
|
|
||||||
.proc open_params
|
DEFINE_OPEN_PARAMS open_params, filename, $3000
|
||||||
params: .byte 3
|
|
||||||
path: .addr pathname
|
|
||||||
buffer: .addr $3000
|
|
||||||
ref_num:.byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc read_params
|
DEFINE_READ_PARAMS read_params, 0, 0
|
||||||
params: .byte 4
|
|
||||||
ref_num:.byte 0
|
|
||||||
buffer: .addr 0
|
|
||||||
request:.word 0
|
|
||||||
trans: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc close_params
|
DEFINE_CLOSE_PARAMS close_params
|
||||||
params: .byte 1
|
DEFINE_SET_MARK_PARAMS set_mark_params, $580 ; This many bytes before the good stuff.
|
||||||
ref_num:.byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc set_mark_params
|
filename:
|
||||||
params: .byte 2
|
|
||||||
ref_num:.byte 0
|
|
||||||
pos: .faraddr $580 ; This many bytes before the good stuff.
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
pathname:
|
|
||||||
PASCAL_STRING "DeskTop2"
|
PASCAL_STRING "DeskTop2"
|
||||||
|
|
||||||
;;; Consecutive segments are loaded, |size| bytes are loaded at |addr|
|
;;; Consecutive segments are loaded, |size| bytes are loaded at |addr|
|
||||||
@ -349,8 +303,8 @@ loop: lda segment_num
|
|||||||
continue:
|
continue:
|
||||||
asl a
|
asl a
|
||||||
tax
|
tax
|
||||||
copy16 segment_addr_table,x, read_params::buffer
|
copy16 segment_addr_table,x, read_params::data_buffer
|
||||||
copy16 segment_size_table,x, read_params::request
|
copy16 segment_size_table,x, read_params::request_count
|
||||||
php
|
php
|
||||||
sei
|
sei
|
||||||
MLI_CALL READ, read_params
|
MLI_CALL READ, read_params
|
||||||
@ -394,7 +348,7 @@ segment_num: .byte 0
|
|||||||
tax
|
tax
|
||||||
lda segment_dest_table+1,x
|
lda segment_dest_table+1,x
|
||||||
sta dst+1
|
sta dst+1
|
||||||
lda read_params::buffer+1
|
lda read_params::data_buffer+1
|
||||||
sta src+1
|
sta src+1
|
||||||
clc
|
clc
|
||||||
adc segment_size_table+1,x
|
adc segment_size_table+1,x
|
||||||
@ -435,7 +389,7 @@ max_page:
|
|||||||
tax
|
tax
|
||||||
lda segment_dest_table+1,x
|
lda segment_dest_table+1,x
|
||||||
sta dst+1
|
sta dst+1
|
||||||
lda read_params::buffer+1
|
lda read_params::data_buffer+1
|
||||||
sta src+1
|
sta src+1
|
||||||
clc
|
clc
|
||||||
adc segment_size_table+1,x
|
adc segment_size_table+1,x
|
||||||
|
@ -4252,16 +4252,8 @@ L6454: jsr L653F
|
|||||||
MGTK_CALL MGTK::PaintRect, fill_rect_params
|
MGTK_CALL MGTK::PaintRect, fill_rect_params
|
||||||
jmp L6556
|
jmp L6556
|
||||||
|
|
||||||
.proc alloc_interrupt_params
|
DEFINE_ALLOC_INTERRUPT_PARAMS alloc_interrupt_params, interrupt_handler
|
||||||
count: .byte 2
|
DEFINE_DEALLOC_INTERRUPT_PARAMS dealloc_interrupt_params
|
||||||
int_num:.byte 0
|
|
||||||
code: .addr interrupt_handler
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc dealloc_interrupt_params
|
|
||||||
count: .byte 1
|
|
||||||
int_num:.byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
L646F:
|
L646F:
|
||||||
lda #$00
|
lda #$00
|
||||||
|
@ -39,31 +39,10 @@ item_label:
|
|||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
.proc open_params
|
DEFINE_OPEN_PARAMS open_params, str_desktop2, $1C00
|
||||||
param_count: .byte 3
|
DEFINE_SET_MARK_PARAMS set_mark_params, $131E0
|
||||||
pathname: .addr str_desktop2
|
DEFINE_READ_PARAMS read_params, load_target, $200
|
||||||
io_buffer: .addr $1C00
|
DEFINE_CLOSE_PARAMS close_params
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc set_mark_params
|
|
||||||
param_count: .byte 2
|
|
||||||
ref_num: .byte 0
|
|
||||||
position: .faraddr $131E0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc read_params
|
|
||||||
param_count: .byte 4
|
|
||||||
ref_num: .byte 0
|
|
||||||
data_buffer: .addr load_target
|
|
||||||
request_count: .word $0200
|
|
||||||
trans_count: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc close_params
|
|
||||||
param_count: .byte 1
|
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
str_desktop2:
|
str_desktop2:
|
||||||
PASCAL_STRING "DeskTop2"
|
PASCAL_STRING "DeskTop2"
|
||||||
|
@ -31,32 +31,12 @@ LAB37 := $AB37
|
|||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
.proc open_params
|
DEFINE_OPEN_PARAMS open_params, filename, $1C00
|
||||||
param_count: .byte 3
|
|
||||||
pathname: .addr filename
|
|
||||||
io_buffer: .addr $1C00
|
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
filename: PASCAL_STRING "DeskTop2"
|
filename: PASCAL_STRING "DeskTop2"
|
||||||
|
|
||||||
.proc read_params
|
DEFINE_READ_PARAMS read_params, 0, 0
|
||||||
param_count: .byte 4
|
DEFINE_SET_MARK_PARAMS set_mark_params, $133E0
|
||||||
ref_num: .byte 0
|
DEFINE_CLOSE_PARAMS close_params
|
||||||
data_buffer: .addr 0
|
|
||||||
request_count: .word 0
|
|
||||||
trans_count: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc set_mark_params
|
|
||||||
param_count: .byte 2
|
|
||||||
ref_num: .byte 0
|
|
||||||
position: .faraddr $133E0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc close_params
|
|
||||||
param_count: .byte 1
|
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.byte $00,$00
|
.byte $00,$00
|
||||||
|
|
||||||
|
@ -1066,26 +1066,9 @@ L1239: .byte $00
|
|||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
.proc on_line_params
|
DEFINE_ON_LINE_PARAMS on_line_params, $1C00
|
||||||
param_count: .byte 2
|
DEFINE_READ_BLOCK_PARAMS read_block_params, $1C00, 0
|
||||||
unit_num: .byte 0
|
DEFINE_WRITE_BLOCK_PARAMS write_block_params, prodos_loader_blocks, 0
|
||||||
data_buffer: .addr $1C00
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc read_block_params
|
|
||||||
param_count: .byte 3
|
|
||||||
unit_num: .byte 0
|
|
||||||
data_buffer: .addr $1C00
|
|
||||||
block_num: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
|
|
||||||
.proc write_block_params
|
|
||||||
param_count: .byte 3
|
|
||||||
unit_num: .byte 0
|
|
||||||
data_buffer: .addr prodos_loader_blocks
|
|
||||||
block_num: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
L124A: .byte $00
|
L124A: .byte $00
|
||||||
|
|
||||||
|
@ -1271,25 +1271,9 @@ L9C09: sta $D2AC
|
|||||||
yax_call launch_dialog, $0C, $D2AC
|
yax_call launch_dialog, $0C, $D2AC
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.proc open_params
|
DEFINE_OPEN_PARAMS open_params, $1C00, $800
|
||||||
param_count: .byte 3
|
DEFINE_WRITE_PARAMS write_params, $C00, $800
|
||||||
pathname: .addr $1C00
|
DEFINE_CLOSE_PARAMS flush_close_params
|
||||||
io_buffer: .addr $800
|
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc write_params
|
|
||||||
param_count: .byte 4
|
|
||||||
ref_num: .byte 0
|
|
||||||
data_buffer: .addr $C00
|
|
||||||
request_count: .word $800
|
|
||||||
trans_count: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc flush_close_params
|
|
||||||
param_count: .byte 1
|
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
L9C26: addr_call L9E2A, $1C00
|
L9C26: addr_call L9E2A, $1C00
|
||||||
inc $1C00
|
inc $1C00
|
||||||
@ -1328,35 +1312,13 @@ L9C81: yax_call MLI_RELAY, FLUSH, flush_close_params
|
|||||||
yax_call MLI_RELAY, CLOSE, flush_close_params
|
yax_call MLI_RELAY, CLOSE, flush_close_params
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.proc open_params2
|
DEFINE_OPEN_PARAMS open_params2, $9C9A, $800
|
||||||
param_count: .byte 3
|
|
||||||
pathname: .addr $9C9A
|
|
||||||
io_buffer: .addr $800
|
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
L9C9A: PASCAL_STRING "Selector.List"
|
L9C9A: PASCAL_STRING "Selector.List"
|
||||||
|
|
||||||
.proc read_params2
|
DEFINE_READ_PARAMS read_params2, $C00, $800
|
||||||
param_count: .byte 4
|
DEFINE_WRITE_PARAMS write_params2, $C00, $800
|
||||||
ref_num: .byte 0
|
DEFINE_CLOSE_PARAMS close_params2
|
||||||
data_buffer: .addr $C00
|
|
||||||
request_count: .word $800
|
|
||||||
trans_count: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc write_params2
|
|
||||||
param_count: .byte 4
|
|
||||||
ref_num: .byte 0
|
|
||||||
data_buffer: .addr $C00
|
|
||||||
request_count: .word $800
|
|
||||||
trans_count: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.proc close_params2
|
|
||||||
param_count: .byte 1
|
|
||||||
ref_num: .byte 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
L9CBA: yax_call MLI_RELAY, OPEN, open_params2
|
L9CBA: yax_call MLI_RELAY, OPEN, open_params2
|
||||||
beq L9CCF
|
beq L9CCF
|
||||||
@ -1541,19 +1503,7 @@ L9E40: .addr $1234
|
|||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.proc get_file_info_params
|
DEFINE_GET_FILE_INFO_PARAMS get_file_info_params
|
||||||
param_count: .byte $A
|
|
||||||
pathname: .addr 0
|
|
||||||
access: .byte 0
|
|
||||||
file_type: .byte 0
|
|
||||||
aux_type: .word 0
|
|
||||||
storage_type: .byte 0
|
|
||||||
blocks_used: .word 0
|
|
||||||
mod_date: .word 0
|
|
||||||
mod_time: .word 0
|
|
||||||
create_date: .word 0
|
|
||||||
create_time: .word 0
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
L9E61: jsr L9E74
|
L9E61: jsr L9E74
|
||||||
stax get_file_info_params::pathname
|
stax get_file_info_params::pathname
|
||||||
|
139
inc/prodos.inc
139
inc/prodos.inc
@ -115,3 +115,142 @@ end:
|
|||||||
.res res - (end - data), 0
|
.res res - (end - data), 0
|
||||||
.endif
|
.endif
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
.macro DEFINE_OPEN_PARAMS name, pn, io
|
||||||
|
.if .xmatch(.string(pn), "pathname")
|
||||||
|
;; If 'pathname' is passed then expansion yields a circular reference.
|
||||||
|
.error "Can't pass 'pathname' label to DEFINE_*_PARAMS"
|
||||||
|
.endif
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 3
|
||||||
|
pathname: .addr pn
|
||||||
|
io_buffer: .addr io
|
||||||
|
ref_num: .byte 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_READ_PARAMS name, db, rc
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 4
|
||||||
|
ref_num: .byte 0
|
||||||
|
data_buffer: .addr db
|
||||||
|
request_count: .word rc
|
||||||
|
trans_count: .word 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_WRITE_PARAMS name, db, rc
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 4
|
||||||
|
ref_num: .byte 0
|
||||||
|
data_buffer: .addr db
|
||||||
|
request_count: .word rc
|
||||||
|
trans_count: .word 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_CLOSE_PARAMS name
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 1
|
||||||
|
ref_num: .byte 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_FLUSH_PARAMS name
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 1
|
||||||
|
ref_num: .byte 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_GET_FILE_INFO_PARAMS name
|
||||||
|
.if .xmatch(.string(pn), "pathname")
|
||||||
|
;; If 'pathname' is passed then expansion yields a circular reference.
|
||||||
|
.error "Can't pass 'pathname' label to DEFINE_*_PARAMS"
|
||||||
|
.endif
|
||||||
|
.proc name
|
||||||
|
param_count: .byte $A
|
||||||
|
pathname: .addr 0
|
||||||
|
access: .byte 0
|
||||||
|
file_type: .byte 0
|
||||||
|
aux_type: .word 0
|
||||||
|
storage_type: .byte 0
|
||||||
|
blocks_used: .word 0
|
||||||
|
mod_date: .word 0
|
||||||
|
mod_time: .word 0
|
||||||
|
create_date: .word 0
|
||||||
|
create_time: .word 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_SET_MARK_PARAMS name, pos
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 2
|
||||||
|
ref_num: .byte 0
|
||||||
|
position: .faraddr pos
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_ON_LINE_PARAMS name, db
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 2
|
||||||
|
unit_num: .byte 0
|
||||||
|
data_buffer: .addr db
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_READ_BLOCK_PARAMS name, db, bn
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 3
|
||||||
|
unit_num: .byte 0
|
||||||
|
data_buffer: .addr db
|
||||||
|
block_num: .word bn
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
.macro DEFINE_WRITE_BLOCK_PARAMS name, db, bn
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 3
|
||||||
|
unit_num: .byte 0
|
||||||
|
data_buffer: .addr db
|
||||||
|
block_num: .word bn
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_ALLOC_INTERRUPT_PARAMS name, ic
|
||||||
|
.proc alloc_interrupt_params
|
||||||
|
param_count: .byte 2
|
||||||
|
int_num: .byte 0
|
||||||
|
int_code: .addr ic
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_DEALLOC_INTERRUPT_PARAMS name
|
||||||
|
.proc dealloc_interrupt_params
|
||||||
|
param_count: .byte 1
|
||||||
|
int_num: .byte 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_QUIT_PARAMS name
|
||||||
|
.proc name
|
||||||
|
param_count: .byte 4
|
||||||
|
.byte 0
|
||||||
|
.word 0
|
||||||
|
.byte 0
|
||||||
|
.word 0
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
.macro DEFINE_SET_PREFIX_PARAMS name, pn
|
||||||
|
.if .xmatch(.string(pn), "pathname")
|
||||||
|
;; If 'pathname' is passed then expansion yields a circular reference.
|
||||||
|
.error "Can't pass 'pathname' label to DEFINE_*_PARAMS"
|
||||||
|
.endif
|
||||||
|
.proc prefix_params
|
||||||
|
param_count: .byte 1
|
||||||
|
pathname: .addr pn
|
||||||
|
.endproc
|
||||||
|
.endmacro
|
||||||
|
Loading…
x
Reference in New Issue
Block a user