mirror of
https://github.com/mi57730/a2d.git
synced 2024-11-29 07:49:20 +00:00
Show Image File additions/fixes
* Make ESC key close * Fix cursor glitch when closing if over menu * Don't overlap input/window params - maybe fix MD bug?
This commit is contained in:
parent
c39a8a5816
commit
2f1e20099d
@ -186,11 +186,11 @@ A2D_HIDE_CURSOR := $26
|
||||
A2D_GET_INPUT := $2A
|
||||
;; (input length 0 bytes)
|
||||
;; (output length 5 bytes)
|
||||
;; .byte state (0=up, 1=press, 2=release, 3=key, 4=held)
|
||||
;; if state is not 3:
|
||||
;; .byte state (A2D_INPUT_*)
|
||||
;; if state is A2D_INPUT_KEY:
|
||||
;; .byte key (ASCII code; high bit clear)
|
||||
;; .byte modifiers (0=none, 1=open-apple, 2=closed-apple, 3=both)
|
||||
;; if state is 3:
|
||||
;; if state otherwise:
|
||||
;; .word xcoord
|
||||
;; .word ycoord
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
;;; HGR to DHR - Aux Mem Bytes
|
||||
hgr_to_dhr_aux:
|
||||
;;; HR to DHR - Aux Mem Bytes
|
||||
hr_to_dhr_aux:
|
||||
.byte $00, $01, $06, $07, $18, $19, $1e, $1f
|
||||
.byte $60, $61, $66, $67, $78, $79, $7e, $7f
|
||||
.byte $00, $01, $06, $07, $18, $19, $1e, $1f
|
||||
@ -34,8 +34,8 @@ hgr_to_dhr_aux:
|
||||
.byte $00, $03, $0c, $0f, $30, $33, $3c, $3f
|
||||
.byte $40, $43, $4c, $4f, $70, $73, $7c, $7f
|
||||
|
||||
;;; HGR to DHR - Main Mem Bytes
|
||||
hgr_to_dhr_main:
|
||||
;;; HR to DHR - Main Mem Bytes
|
||||
hr_to_dhr_main:
|
||||
.byte $00, $80, $00, $80, $00, $80, $00, $80
|
||||
.byte $00, $80, $00, $80, $00, $80, $00, $80
|
||||
.byte $03, $83, $03, $83, $03, $83, $03, $83
|
@ -33,8 +33,8 @@ for (my $i = 0; $i < 256; ++$i) {
|
||||
}
|
||||
|
||||
print "\n";
|
||||
print ";;; HGR to DHR - Aux Mem Bytes\n";
|
||||
print "hgr_to_dhr_aux:\n";
|
||||
print ";;; HR to DHR - Aux Mem Bytes\n";
|
||||
print "hr_to_dhr_aux:\n";
|
||||
for (my $i = 0; $i < 256; $i += 8) {
|
||||
print " .byte ";
|
||||
for (my $j = 0; $j < 8; ++$j) {
|
||||
@ -44,8 +44,8 @@ for (my $i = 0; $i < 256; $i += 8) {
|
||||
print "\n";
|
||||
}
|
||||
print "\n";
|
||||
print ";;; HGR to DHR - Main Mem Bytes\n";
|
||||
print "hgr_to_dhr_main:\n";
|
||||
print ";;; HR to DHR - Main Mem Bytes\n";
|
||||
print "hr_to_dhr_main:\n";
|
||||
for (my $i = 0; $i < 256; $i += 8) {
|
||||
print " .byte ";
|
||||
for (my $j = 0; $j < 8; ++$j) {
|
@ -2,6 +2,7 @@
|
||||
.org $800
|
||||
|
||||
.include "apple2.inc"
|
||||
.include "../inc/apple2.inc"
|
||||
.include "../inc/prodos.inc"
|
||||
.include "../inc/auxmem.inc"
|
||||
.include "a2d.inc"
|
||||
@ -188,7 +189,7 @@ data: .res 64, 0
|
||||
params_end:
|
||||
;;; ----------------------------------------
|
||||
|
||||
window_id := $64
|
||||
window_id := 100
|
||||
|
||||
.proc line_pos
|
||||
left: .word 0
|
||||
@ -198,6 +199,16 @@ base: .word 0
|
||||
|
||||
.proc input_params ; queried to track mouse-up
|
||||
state: .byte $00
|
||||
|
||||
;;; if state is A2D_INPUT_KEY
|
||||
key := *
|
||||
modifiers := *+1
|
||||
|
||||
;;; otherwise
|
||||
xcoord := *
|
||||
ycoord := *+2
|
||||
|
||||
.res 4 ; space for both
|
||||
.endproc
|
||||
|
||||
default_width := 560
|
||||
@ -355,13 +366,12 @@ end: rts
|
||||
sta read_params::ref_num
|
||||
sta close_params::ref_num
|
||||
|
||||
A2D_CALL A2D_HIDE_CURSOR
|
||||
jsr stash_menu
|
||||
|
||||
;; create window
|
||||
A2D_CALL A2D_CREATE_WINDOW, window_params
|
||||
A2D_CALL A2D_SET_STATE, window_params::box
|
||||
|
||||
jsr show_file
|
||||
A2D_CALL A2D_SHOW_CURSOR
|
||||
|
||||
A2D_CALL $2B ; ???
|
||||
;; fall through
|
||||
@ -373,18 +383,31 @@ end: rts
|
||||
.proc input_loop
|
||||
A2D_CALL A2D_GET_INPUT, input_params
|
||||
lda input_params::state
|
||||
cmp #1 ; was clicked?
|
||||
bne input_loop ; nope, keep waiting
|
||||
cmp #A2D_INPUT_DOWN ; was clicked?
|
||||
beq exit
|
||||
cmp #A2D_INPUT_KEY ; any key?
|
||||
beq on_key
|
||||
bne input_loop
|
||||
|
||||
on_key:
|
||||
lda input_params::modifiers
|
||||
bne input_loop
|
||||
lda input_params::key
|
||||
cmp #KEY_ESCAPE
|
||||
beq exit
|
||||
bne input_loop
|
||||
|
||||
exit:
|
||||
A2D_CALL A2D_HIDE_CURSOR
|
||||
A2D_CALL A2D_DESTROY_WINDOW, window_params
|
||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||
jsr unstash_menu
|
||||
A2D_CALL A2D_SHOW_CURSOR
|
||||
|
||||
rts ; exits input loop
|
||||
.endproc
|
||||
|
||||
.proc show_file
|
||||
A2D_CALL A2D_HIDE_CURSOR
|
||||
jsr get_file_eof
|
||||
|
||||
;; If bigger than $2000, assume DHR
|
||||
@ -397,22 +420,21 @@ end: rts
|
||||
sbc #^(hires_size+1)
|
||||
bcs dhr
|
||||
|
||||
jsr show_shr_file
|
||||
jsr show_hr_file
|
||||
jmp close
|
||||
|
||||
dhr: jsr show_dhr_file
|
||||
|
||||
close: jsr close_file
|
||||
A2D_CALL A2D_SHOW_CURSOR
|
||||
rts
|
||||
.endproc
|
||||
|
||||
.proc show_shr_file
|
||||
.proc show_hr_file
|
||||
sta PAGE2OFF
|
||||
jsr read_file
|
||||
jsr close_file
|
||||
|
||||
jsr hgr_to_dhr
|
||||
jsr hr_to_dhr
|
||||
rts
|
||||
.endproc
|
||||
|
||||
@ -434,9 +456,9 @@ close: jsr close_file
|
||||
;;; Convert single hires to double hires
|
||||
|
||||
;;; Assumes the image is loaded to MAIN $2000 and
|
||||
;;; relies on the hgr_to_dhr.inc table.
|
||||
;;; relies on the hr_to_dhr.inc table.
|
||||
|
||||
.proc hgr_to_dhr
|
||||
.proc hr_to_dhr
|
||||
ptr := $06
|
||||
rows := 192
|
||||
cols := 40
|
||||
@ -462,10 +484,10 @@ cloop: lda (ptr),y
|
||||
|
||||
;; complex case - need to spill in bit from prev col and store
|
||||
|
||||
lda hgr_to_dhr_aux,x
|
||||
lda hr_to_dhr_aux,x
|
||||
sta PAGE2ON
|
||||
sta (ptr),y
|
||||
lda hgr_to_dhr_main,x
|
||||
lda hr_to_dhr_main,x
|
||||
ora spill ; apply previous spill bit (to bit 6)
|
||||
sta PAGE2OFF
|
||||
sta (ptr),y
|
||||
@ -478,10 +500,10 @@ cloop: lda (ptr),y
|
||||
|
||||
hibitset:
|
||||
;; simple case - no bit spillage
|
||||
lda hgr_to_dhr_aux,x
|
||||
lda hr_to_dhr_aux,x
|
||||
sta PAGE2ON
|
||||
sta (ptr),y
|
||||
lda hgr_to_dhr_main,x
|
||||
lda hr_to_dhr_main,x
|
||||
sta PAGE2OFF
|
||||
sta (ptr),y
|
||||
|
||||
@ -614,4 +636,4 @@ cloop: lda (src),y
|
||||
.endproc
|
||||
|
||||
.include "inc/hires_table.inc"
|
||||
.include "inc/hgr_to_dhr.inc"
|
||||
.include "inc/hr_to_dhr.inc"
|
||||
|
Loading…
Reference in New Issue
Block a user