From dd406a01efba2c9d9fe3f9dbcdb832048fffcdc6 Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Sun, 3 Sep 2017 22:55:17 -0700 Subject: [PATCH] DHR: Stash menu pixels --- desk.acc/show.text.file/dhr.s | 162 ++++++++++++++++++++++++++----- desk.acc/show.text.file/stf.list | 7 ++ desk.acc/show.text.file/stf.o | Bin 22833 -> 22899 bytes 3 files changed, 147 insertions(+), 22 deletions(-) diff --git a/desk.acc/show.text.file/dhr.s b/desk.acc/show.text.file/dhr.s index fe43a90..01ae402 100644 --- a/desk.acc/show.text.file/dhr.s +++ b/desk.acc/show.text.file/dhr.s @@ -149,14 +149,14 @@ params_start: ref_num:.byte 0 ; ref_num .endproc -default_buffer := $1200 -chunk_size := $800 ; fits in $1200...$2000, divides $2000 evenly + hires := $2000 + hires_size := $2000 .proc read_params .byte 4 ; param_count ref_num:.byte 0 ; ref_num -buffer: .addr default_buffer ; data_buffer -request:.word chunk_size ; request_count +buffer: .addr hires ; data_buffer +request:.word hires_size ; request_count .word 0 ; trans_count .endproc @@ -377,16 +377,19 @@ end: rts .endproc .proc open_file_and_init_window - ;; open file jsr open_file lda open_params::ref_num sta read_params::ref_num sta close_params::ref_num + jsr stash_menu + ;; create window A2D_CALL A2D_CREATE_WINDOW, window_params A2D_CALL A2D_TEXT_BOX1, text_box + jsr show_file + A2D_CALL $2B, 0 ; ??? ;; fall through .endproc @@ -402,6 +405,8 @@ end: rts A2D_CALL A2D_DESTROY_WINDOW, window_params + jsr unstash_menu + jsr UNKNOWN_CALL ; ??? .byte $0C .addr 0 @@ -410,26 +415,12 @@ end: rts .endproc .proc show_file - hgr := $2000 - - ;; AUX memory half - 4 chunks - lda #hgr - sta read_params::buffer+1 - sta read_params::request+1 - sta PAGE2ON + ;; AUX memory half + sta PAGE2ON jsr read_file ;; MAIN memory half - lda #hgr - sta read_params::buffer+1 - sta read_params::request+1 - sta PAGE2OFF + sta PAGE2OFF jsr read_file ;; TODO: Restore PAGE2 state? @@ -437,3 +428,130 @@ end: rts jsr close_file rts .endproc + + ;; TODO: Stash menu bar pixels - 13 rows * 2 banks * 40 bytes + +hires_table: + .addr $2000 ; row 0 + .addr $2400 ; 1 + .addr $2800 ; 2 + .addr $2c00 ; 3 + .addr $3000 ; 4 + .addr $3400 ; 5 + .addr $3800 ; 6 + .addr $3c00 ; 7 + .addr $2080 ; 8 + .addr $2480 ; 9 + .addr $2880 ; 10 + .addr $2c80 ; 11 + .addr $3080 ; 12 + .addr $3480 ; 13 + .addr $3880 ; just in case + .addr $3c80 + + + stash := $1200 ; Past DA code + rows = 13 + cols = 40 + +.proc stash_menu + src := $08 + dst := $06 + lda #stash + sta dst+1 + + sta PAGE2ON + jsr inner + sta PAGE2OFF + +inner: + + lda #0 ; row # +rloop: pha + asl a + tax + lda hires_table,x + sta src + lda hires_table+1,x + sta src+1 + ldy #cols-1 +cloop: lda (src),y + sta (dst),y + dey + bpl cloop + + clc ; src += cols + lda src + adc #cols + sta src+1 + + clc ; dst += cols + lda dst + adc #cols + sta dst+1 + + pla + inc + cmp #rows + bcc rloop + rts +.endproc + +.proc unstash_menu + src := $08 + dst := $06 + lda #stash + sta src+1 + + sta PAGE2ON + jsr inner + sta PAGE2OFF + +inner: + + lda #0 ; row # +rloop: pha + asl a + tax + lda hires_table,x + sta dst + lda hires_table+1,x + sta dst+1 + ldy #cols-1 +cloop: lda (src),y + sta (dst),y + dey + bpl cloop + + clc ; src += cols + lda src + adc #cols + sta src+1 + + clc ; dst += cols + lda dst + adc #cols + sta dst+1 + + pla + inc + cmp #rows + bcc rloop + rts +.endproc diff --git a/desk.acc/show.text.file/stf.list b/desk.acc/show.text.file/stf.list index 3d6625c..4f5f14f 100644 --- a/desk.acc/show.text.file/stf.list +++ b/desk.acc/show.text.file/stf.list @@ -62,10 +62,17 @@ Current file: stf.s 000800 2 RAMWRTON := $C005 000800 2 ALTZPOFF := $C008 000800 2 ALTZPON := $C009 +000800 2 +000800 2 PAGE2OFF := $C054 +000800 2 PAGE2ON := $C055 +000800 2 HIRESON := $C056 +000800 2 HIRESOFF := $C057 +000800 2 000800 2 LCBANK1 := $C08B 000800 2 000800 2 ;;; Routines 000800 2 AUXMOVE := $C311 ; carry set main>aux, carry clear aux>main +000800 2 XFER := $C314 000800 2 000800 2 STARTLO := $3C 000800 2 STARTHI := $3D diff --git a/desk.acc/show.text.file/stf.o b/desk.acc/show.text.file/stf.o index b4d6e6aac8ceb90c864e30d5e4d6857fb07db767..f49e3a196f56085ab8dde29c69dc03026efd6690 100644 GIT binary patch delta 11156 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