mirror of
https://github.com/mi57730/a2d.git
synced 2024-11-28 15:50:16 +00:00
THIS.APPLE DA: empty slots, RamWorks memory
This commit is contained in:
parent
2d9788fac3
commit
95e1d2268a
@ -87,7 +87,7 @@ str_title:
|
|||||||
PASCAL_STRING "About this Apple II"
|
PASCAL_STRING "About this Apple II"
|
||||||
|
|
||||||
.proc iie_bitmap
|
.proc iie_bitmap
|
||||||
viewloc: DEFINE_POINT 40, 5
|
viewloc: DEFINE_POINT 59, 5
|
||||||
mapbits: .addr iie_bits
|
mapbits: .addr iie_bits
|
||||||
mapwidth: .byte 8
|
mapwidth: .byte 8
|
||||||
reserved: .res 1
|
reserved: .res 1
|
||||||
@ -95,7 +95,7 @@ maprect: DEFINE_RECT 0, 0, 50, 25
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc iic_bitmap
|
.proc iic_bitmap
|
||||||
viewloc: DEFINE_POINT 44, 4
|
viewloc: DEFINE_POINT 64, 4
|
||||||
mapbits: .addr iic_bits
|
mapbits: .addr iic_bits
|
||||||
mapwidth: .byte 6
|
mapwidth: .byte 6
|
||||||
reserved: .res 1
|
reserved: .res 1
|
||||||
@ -103,7 +103,7 @@ maprect: DEFINE_RECT 0, 0, 41, 27
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc iigs_bitmap
|
.proc iigs_bitmap
|
||||||
viewloc: DEFINE_POINT 46, 5
|
viewloc: DEFINE_POINT 65, 5
|
||||||
mapbits: .addr iigs_bits
|
mapbits: .addr iigs_bits
|
||||||
mapwidth: .byte 6
|
mapwidth: .byte 6
|
||||||
reserved: .res 1
|
reserved: .res 1
|
||||||
@ -111,7 +111,7 @@ maprect: DEFINE_RECT 0, 0, 38, 25
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc iii_bitmap
|
.proc iii_bitmap
|
||||||
viewloc: DEFINE_POINT 38, 5
|
viewloc: DEFINE_POINT 57, 5
|
||||||
mapbits: .addr iii_bits
|
mapbits: .addr iii_bits
|
||||||
mapwidth: .byte 8
|
mapwidth: .byte 8
|
||||||
reserved: .res 1
|
reserved: .res 1
|
||||||
@ -266,6 +266,14 @@ str_prodos_version:
|
|||||||
str_slot_n:
|
str_slot_n:
|
||||||
PASCAL_STRING "Slot 0: "
|
PASCAL_STRING "Slot 0: "
|
||||||
|
|
||||||
|
str_memory_prefix:
|
||||||
|
PASCAL_STRING "Memory: "
|
||||||
|
|
||||||
|
str_memory_suffix:
|
||||||
|
PASCAL_STRING "K"
|
||||||
|
|
||||||
|
memory:.word 0
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
str_diskii: PASCAL_STRING "Disk II"
|
str_diskii: PASCAL_STRING "Disk II"
|
||||||
@ -288,6 +296,7 @@ str_audio: PASCAL_STRING "Audio Card"
|
|||||||
str_storage: PASCAL_STRING "Mass Storage"
|
str_storage: PASCAL_STRING "Mass Storage"
|
||||||
str_network: PASCAL_STRING "Network Card"
|
str_network: PASCAL_STRING "Network Card"
|
||||||
str_unknown: PASCAL_STRING "(unknown)"
|
str_unknown: PASCAL_STRING "(unknown)"
|
||||||
|
str_empty: PASCAL_STRING "(empty)"
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
@ -310,8 +319,9 @@ slot_pos_table:
|
|||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
model_pos: DEFINE_POINT 150, 15
|
model_pos: DEFINE_POINT 150, 12
|
||||||
pdver_pos: DEFINE_POINT 150, 30
|
pdver_pos: DEFINE_POINT 150, 23
|
||||||
|
mem_pos: DEFINE_POINT 150, 34
|
||||||
|
|
||||||
.proc event_params
|
.proc event_params
|
||||||
kind: .byte 0
|
kind: .byte 0
|
||||||
@ -446,6 +456,7 @@ done:
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
;;; KVERSION Table
|
;;; KVERSION Table
|
||||||
@ -521,6 +532,7 @@ done: rts
|
|||||||
|
|
||||||
jsr identify_model
|
jsr identify_model
|
||||||
jsr update_version_string
|
jsr update_version_string
|
||||||
|
jsr update_memory_string
|
||||||
|
|
||||||
MGTK_CALL MGTK::OpenWindow, winfo
|
MGTK_CALL MGTK::OpenWindow, winfo
|
||||||
jsr draw_window
|
jsr draw_window
|
||||||
@ -635,9 +647,15 @@ done: rts
|
|||||||
MGTK_CALL MGTK::MoveTo, line1
|
MGTK_CALL MGTK::MoveTo, line1
|
||||||
MGTK_CALL MGTK::LineTo, line2
|
MGTK_CALL MGTK::LineTo, line2
|
||||||
|
|
||||||
|
MGTK_CALL MGTK::MoveTo, mem_pos
|
||||||
|
addr_call draw_pascal_string, str_memory_prefix
|
||||||
|
addr_call draw_pascal_string, str_from_int
|
||||||
|
addr_call draw_pascal_string, str_memory_suffix
|
||||||
|
|
||||||
lda #7
|
lda #7
|
||||||
sta slot
|
sta slot
|
||||||
|
lda #1<<7
|
||||||
|
sta mask
|
||||||
|
|
||||||
loop: lda slot
|
loop: lda slot
|
||||||
asl
|
asl
|
||||||
@ -649,10 +667,23 @@ loop: lda slot
|
|||||||
adc #'0'
|
adc #'0'
|
||||||
sta str_slot_n + 6
|
sta str_slot_n + 6
|
||||||
addr_call draw_pascal_string, str_slot_n
|
addr_call draw_pascal_string, str_slot_n
|
||||||
lda slot
|
|
||||||
|
;; Check ProDOS slot bit mask
|
||||||
|
sta RAMRDOFF
|
||||||
|
lda SLTBYT
|
||||||
|
sta RAMRDON
|
||||||
|
and mask
|
||||||
|
bne check
|
||||||
|
|
||||||
|
ldax #str_empty
|
||||||
|
jsr draw_pascal_string
|
||||||
|
jmp next
|
||||||
|
|
||||||
|
check: lda slot
|
||||||
jsr probe_slot
|
jsr probe_slot
|
||||||
jsr draw_pascal_string
|
jsr draw_pascal_string
|
||||||
|
|
||||||
|
next: lsr mask
|
||||||
dec slot
|
dec slot
|
||||||
bne loop
|
bne loop
|
||||||
|
|
||||||
@ -660,6 +691,7 @@ loop: lda slot
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
slot: .byte 0
|
slot: .byte 0
|
||||||
|
mask: .byte 0
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
@ -854,6 +886,71 @@ notpas:
|
|||||||
result str_unknown
|
result str_unknown
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; Update str_memory with memory count in kilobytes
|
||||||
|
|
||||||
|
.proc update_memory_string
|
||||||
|
copy16 #0, memory
|
||||||
|
jsr check_ramworks_memory
|
||||||
|
sty memory ; Y is number of 64k banks
|
||||||
|
cpy #0 ; 0 means 256 banks
|
||||||
|
bne :+
|
||||||
|
inc memory+1
|
||||||
|
: inc16 memory ; Main 64k memory
|
||||||
|
asl16 memory ; * 64
|
||||||
|
asl16 memory
|
||||||
|
asl16 memory
|
||||||
|
asl16 memory
|
||||||
|
asl16 memory
|
||||||
|
asl16 memory
|
||||||
|
ldax memory
|
||||||
|
jsr int_to_string
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
;;; Calculate RamWorks memory; returns number of banks in Y
|
||||||
|
;;; (256 banks = 0)
|
||||||
|
;;; Inspired by "gid" comp.sys.apple2.programmer
|
||||||
|
|
||||||
|
.proc check_ramworks_memory
|
||||||
|
;; Run from clone in main memory
|
||||||
|
sta RAMRDOFF
|
||||||
|
sta RAMWRTOFF
|
||||||
|
|
||||||
|
;; Assumes ALTZPON on entry/exit
|
||||||
|
RWBANK := $C073
|
||||||
|
|
||||||
|
;; Try to store sentinels in each bank (descending)
|
||||||
|
ldy #0
|
||||||
|
: sty RWBANK ; select bank
|
||||||
|
sty $00 ; sentinel: $00 = bank
|
||||||
|
tya
|
||||||
|
eor #$FF
|
||||||
|
sta $01 ; sentinel: $01 = ~bank
|
||||||
|
dey
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
;; Check each bank for sentinels (ascending)
|
||||||
|
: sty RWBANK
|
||||||
|
cpy $00 ; sentinel: $00 = bank ?
|
||||||
|
bne done
|
||||||
|
tya
|
||||||
|
eor #$FF
|
||||||
|
cmp $01 ; sentinel: $01 = ~bank?
|
||||||
|
bne done
|
||||||
|
iny
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
;; Switch back to RW bank 0 (normal aux memory)
|
||||||
|
done: lda #0
|
||||||
|
sta RWBANK
|
||||||
|
|
||||||
|
;; Back to executing from aux memory
|
||||||
|
sta RAMRDON
|
||||||
|
sta RAMWRTON
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
.proc draw_pascal_string
|
.proc draw_pascal_string
|
||||||
@ -870,3 +967,74 @@ notpas:
|
|||||||
MGTK_CALL MGTK::DrawText, params
|
MGTK_CALL MGTK::DrawText, params
|
||||||
exit: rts
|
exit: rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
str_from_int:
|
||||||
|
PASCAL_STRING "000000"
|
||||||
|
|
||||||
|
.proc int_to_string
|
||||||
|
stax value
|
||||||
|
|
||||||
|
;; Fill buffer with spaces
|
||||||
|
ldx #6
|
||||||
|
lda #' '
|
||||||
|
: sta str_from_int,x
|
||||||
|
dex
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta nonzero_flag
|
||||||
|
ldy #0 ; y = position in string
|
||||||
|
ldx #0 ; x = which power index is subtracted (*2)
|
||||||
|
|
||||||
|
;; For each power of ten
|
||||||
|
loop: lda #0
|
||||||
|
sta digit
|
||||||
|
|
||||||
|
;; Keep subtracting/incrementing until zero is hit
|
||||||
|
sloop: cmp16 value, powers,x
|
||||||
|
bpl subtract
|
||||||
|
|
||||||
|
lda digit
|
||||||
|
bne not_pad
|
||||||
|
bit nonzero_flag
|
||||||
|
bmi not_pad
|
||||||
|
|
||||||
|
;; Pad with space
|
||||||
|
lda #' '
|
||||||
|
bne :+
|
||||||
|
;; Convert to ASCII
|
||||||
|
not_pad:
|
||||||
|
clc
|
||||||
|
adc #'0' ; why not ORA $30 ???
|
||||||
|
pha
|
||||||
|
lda #$80
|
||||||
|
sta nonzero_flag
|
||||||
|
pla
|
||||||
|
|
||||||
|
;; Place the character, move to next
|
||||||
|
: sta str_from_int+2,y
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
cpx #8 ; up to 4 digits (*2) via subtraction
|
||||||
|
beq done
|
||||||
|
jmp loop
|
||||||
|
|
||||||
|
subtract:
|
||||||
|
inc digit
|
||||||
|
sub16 value, powers,x, value
|
||||||
|
jmp sloop
|
||||||
|
|
||||||
|
done: lda value ; handle last digit
|
||||||
|
ora #'0'
|
||||||
|
sta str_from_int+2,y
|
||||||
|
rts
|
||||||
|
|
||||||
|
powers: .word 10000, 1000, 100, 10
|
||||||
|
value: .word 0 ; remaining value as subtraction proceeds
|
||||||
|
digit: .byte 0 ; current digit being accumulated
|
||||||
|
nonzero_flag: ; high bit set once a non-zero digit seen
|
||||||
|
.byte 0
|
||||||
|
.endproc
|
||||||
|
@ -17,6 +17,7 @@ TIMELO := $BF92 ; Time lo
|
|||||||
TIMEHI := $BF93 ; Time hi
|
TIMEHI := $BF93 ; Time hi
|
||||||
LEVEL := $BF94 ; File level
|
LEVEL := $BF94 ; File level
|
||||||
MACHID := $BF98 ; Machine ID
|
MACHID := $BF98 ; Machine ID
|
||||||
|
SLTBYT := $BF99 ; '1' bits indicate rom in slot (bit#)
|
||||||
IVERSION := $BFFD ; Interpreter Version
|
IVERSION := $BFFD ; Interpreter Version
|
||||||
KVERSION := $BFFF ; ProDOS Kernel Version
|
KVERSION := $BFFF ; ProDOS Kernel Version
|
||||||
|
|
||||||
|
@ -418,6 +418,12 @@
|
|||||||
ror arg1
|
ror arg1
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
;;; asl16 $1111 ; absolute
|
||||||
|
.macro asl16 arg1
|
||||||
|
asl arg1
|
||||||
|
rol arg1+1
|
||||||
|
.endmacro
|
||||||
|
|
||||||
;;; Increment 16-bit value
|
;;; Increment 16-bit value
|
||||||
.macro inc16 arg
|
.macro inc16 arg
|
||||||
.local skip
|
.local skip
|
||||||
|
Loading…
Reference in New Issue
Block a user