mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-09 03:31:05 +00:00
riven_numbers: print lo-res d'ni numbers
way more trouble than it was worth
This commit is contained in:
parent
258eb510af
commit
b99c902f55
36
demos/dni/Makefile
Normal file
36
demos/dni/Makefile
Normal file
@ -0,0 +1,36 @@
|
||||
include ../../Makefile.inc
|
||||
|
||||
DOS33 = ../../utils/dos33fs-utils/dos33
|
||||
B2D = ../../utils/bmp2dhr/b2d
|
||||
PNG_TO_40x48D = ../../utils/gr-utils/png_to_40x48d
|
||||
PNG_TO_40x96 = ../../utils/gr-utils/png_to_40x96
|
||||
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
|
||||
EMPTY = ../../empty_disk/
|
||||
|
||||
|
||||
all: numbers.dsk
|
||||
|
||||
numbers.dsk: HELLO NUMBERS
|
||||
cp $(EMPTY)/empty.dsk numbers.dsk
|
||||
$(DOS33) -y numbers.dsk SAVE A HELLO
|
||||
$(DOS33) -y numbers.dsk BSAVE -a 0x2000 NUMBERS
|
||||
|
||||
|
||||
####
|
||||
|
||||
NUMBERS: numbers.o
|
||||
ld65 -o NUMBERS numbers.o -C ../../linker_scripts/apple2_2000.inc
|
||||
|
||||
numbers.o: numbers.s \
|
||||
zp.inc hardware.inc number_sprites.inc
|
||||
ca65 -o numbers.o numbers.s -l numbers.lst
|
||||
|
||||
####
|
||||
|
||||
HELLO: hello.bas
|
||||
$(TOKENIZE) < hello.bas > HELLO
|
||||
|
||||
####
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o *.lst NUMBERS
|
6
demos/dni/gr_offsets.s
Normal file
6
demos/dni/gr_offsets.s
Normal file
@ -0,0 +1,6 @@
|
||||
gr_offsets:
|
||||
.word $400,$480,$500,$580,$600,$680,$700,$780
|
||||
.word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8
|
||||
.word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0
|
||||
|
||||
|
99
demos/dni/hardware.inc
Normal file
99
demos/dni/hardware.inc
Normal file
@ -0,0 +1,99 @@
|
||||
;; HARDWARE LOCATIONS
|
||||
|
||||
KEYPRESS = $C000
|
||||
KEYRESET = $C010
|
||||
|
||||
;; SOFT SWITCHES
|
||||
CLR80COL = $C000 ; PAGE1/PAGE2 normal
|
||||
SET80COL = $C001 ; PAGE1/PAGE2 switches PAGE1 in Aux instead
|
||||
EIGHTYCOLOFF = $C00C
|
||||
EIGHTYCOLON = $C00D
|
||||
TBCOLOR = $C022 ; IIgs text foreground / background colors
|
||||
NEWVIDEO = $C029 ; IIgs graphics modes
|
||||
SPEAKER = $C030
|
||||
CLOCKCTL = $C034 ; bits 0-3 are IIgs border color
|
||||
CYAREG = $C036 ; iigs motor detect and clock speed
|
||||
SET_GR = $C050
|
||||
SET_TEXT = $C051
|
||||
FULLGR = $C052
|
||||
TEXTGR = $C053
|
||||
PAGE1 = $C054
|
||||
PAGE2 = $C055
|
||||
LORES = $C056 ; Enable LORES graphics
|
||||
HIRES = $C057 ; Enable HIRES graphics
|
||||
AN3 = $C05E ; Annunciator 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PADDLE_BUTTON0 = $C061
|
||||
PADDL0 = $C064
|
||||
PTRIG = $C070
|
||||
|
||||
;; BASIC ROUTINES
|
||||
|
||||
NORMAL = $F273
|
||||
|
||||
;; MONITOR ROUTINES
|
||||
|
||||
HLINE = $F819 ;; HLINE Y,$2C at A
|
||||
VLINE = $F828 ;; VLINE A,$2D at Y
|
||||
CLRSCR = $F832 ;; Clear low-res screen
|
||||
CLRTOP = $F836 ;; clear only top of low-res screen
|
||||
SETCOL = $F864 ;; COLOR=A
|
||||
ROM_TEXT2COPY = $F962 ;; iigs
|
||||
TEXT = $FB36
|
||||
TABV = $FB5B ;; VTAB to A
|
||||
ROM_MACHINEID = $FBB3 ;; iigs
|
||||
BELL = $FBDD ;; ring the bell
|
||||
BASCALC = $FBC1 ;;
|
||||
VTAB = $FC22 ;; VTAB to CV
|
||||
HOME = $FC58 ;; Clear the text screen
|
||||
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||
CROUT1 = $FD8B
|
||||
SETINV = $FE80 ;; INVERSE
|
||||
SETNORM = $FE84 ;; NORMAL
|
||||
COUT = $FDED ;; output A to screen
|
||||
COUT1 = $FDF0 ;; output A to screen
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
COLOR_BLACK = 0
|
||||
COLOR_RED = 1
|
||||
COLOR_DARKBLUE = 2
|
||||
COLOR_PURPLE = 3
|
||||
COLOR_DARKGREEN = 4
|
||||
COLOR_GREY = 5
|
||||
COLOR_MEDIUMBLUE = 6
|
||||
COLOR_LIGHTBLUE = 7
|
||||
COLOR_BROWN = 8
|
||||
COLOR_ORANGE = 9
|
||||
COLOR_GREY2 = 10
|
||||
COLOR_PINK = 11
|
||||
COLOR_LIGHTGREEN = 12
|
||||
COLOR_YELLOW = 13
|
||||
COLOR_AQUA = 14
|
||||
COLOR_WHITE = 15
|
||||
|
||||
COLOR_BOTH_BLACK = $00
|
||||
COLOR_BOTH_RED = $11
|
||||
COLOR_BOTH_DARKBLUE = $22
|
||||
COLOR_BOTH_DARKGREEN = $44
|
||||
COLOR_BOTH_GREY = $55
|
||||
COLOR_BOTH_MEDIUMBLUE = $66
|
||||
COLOR_BOTH_LIGHTBLUE = $77
|
||||
COLOR_BOTH_BROWN = $88
|
||||
COLOR_BOTH_ORANGE = $99
|
||||
COLOR_BOTH_PINK = $BB
|
||||
COLOR_BOTH_LIGHTGREEN = $CC
|
||||
COLOR_BOTH_YELLOW = $DD
|
||||
COLOR_BOTH_AQUA = $EE
|
||||
COLOR_BOTH_WHITE = $FF
|
||||
|
2
demos/dni/hello.bas
Normal file
2
demos/dni/hello.bas
Normal file
@ -0,0 +1,2 @@
|
||||
5 HOME
|
||||
120 PRINT CHR$(4);"BRUN NUMBERS"
|
141
demos/dni/number_sprites.inc
Normal file
141
demos/dni/number_sprites.inc
Normal file
@ -0,0 +1,141 @@
|
||||
; 18x13
|
||||
|
||||
; frame
|
||||
|
||||
frame_sprite:
|
||||
|
||||
.byte 3,41 ; 3*13, ((3*13)+2)
|
||||
.byte $FF,$FF,$C0
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $60,$01,$80
|
||||
.byte $FF,$FF,$C0
|
||||
|
||||
|
||||
zero_sprite:
|
||||
.byte 1,8 ; 1*6
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $06
|
||||
|
||||
one_sprite:
|
||||
.byte 1,13 ; 11+2
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
.byte $06
|
||||
|
||||
two_sprite:
|
||||
.byte 1,13 ; 11+2
|
||||
.byte $80
|
||||
.byte $C0
|
||||
.byte $60
|
||||
.byte $60
|
||||
.byte $60
|
||||
.byte $60
|
||||
.byte $60
|
||||
.byte $60
|
||||
.byte $60
|
||||
.byte $C0
|
||||
.byte $80
|
||||
|
||||
three_sprite:
|
||||
.byte 1,13 ; 11+2
|
||||
.byte $06
|
||||
.byte $0C
|
||||
.byte $18
|
||||
.byte $30
|
||||
.byte $60
|
||||
.byte $C0
|
||||
.byte $60
|
||||
.byte $30
|
||||
.byte $18
|
||||
.byte $0c
|
||||
.byte $06
|
||||
|
||||
four_sprite:
|
||||
.byte 2,24 ; 11*2+2
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $07,$F0
|
||||
.byte $06,$00
|
||||
.byte $06,$00
|
||||
.byte $06,$00
|
||||
.byte $06,$00
|
||||
.byte $06,$00
|
||||
.byte $06,$00
|
||||
.byte $06,$00
|
||||
.byte $06,$00
|
||||
|
||||
|
||||
|
||||
empty_sprite:
|
||||
.byte 1,3
|
||||
.byte $00
|
||||
|
||||
five_sprite:
|
||||
.byte 2,14 ; 2*6
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $FF,$F0
|
||||
|
||||
ten_sprite:
|
||||
.byte 2,24 ; 2*11
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $3F,$c0
|
||||
.byte $40,$20
|
||||
.byte $80,$10
|
||||
|
||||
fifteen_sprite:
|
||||
.byte 2,24 ; 2*11
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $00,$00
|
||||
.byte $80,$10
|
||||
.byte $C0,$30
|
||||
.byte $60,$60
|
||||
.byte $30,$c0
|
||||
.byte $19,$80
|
||||
.byte $0f,$00
|
||||
.byte $06,$10
|
||||
|
||||
twenty_sprite:
|
||||
.byte 2,14 ; 2*6
|
||||
.byte $30,$00
|
||||
.byte $30,$00
|
||||
.byte $30,$00
|
||||
.byte $30,$00
|
||||
.byte $30,$00
|
||||
.byte $3f,$f0
|
||||
|
||||
|
||||
|
271
demos/dni/numbers.s
Normal file
271
demos/dni/numbers.s
Normal file
@ -0,0 +1,271 @@
|
||||
; numbers
|
||||
|
||||
; by Vince `deater` Weaver
|
||||
|
||||
.include "hardware.inc"
|
||||
.include "zp.inc"
|
||||
|
||||
numbers:
|
||||
bit SET_GR
|
||||
bit LORES
|
||||
bit PAGE1
|
||||
|
||||
lda #0
|
||||
sta DRAW_PAGE
|
||||
|
||||
jsr CLRTOP
|
||||
|
||||
lda #$00
|
||||
sta NUMBER_HIGH
|
||||
lda #$00
|
||||
sta NUMBER_LOW
|
||||
|
||||
number_loop:
|
||||
|
||||
jsr CLRTOP
|
||||
|
||||
lda #4
|
||||
sta XPOS
|
||||
lda #5
|
||||
sta YPOS
|
||||
|
||||
jsr draw_full_dni_number
|
||||
|
||||
|
||||
wait_for_it:
|
||||
lda KEYPRESS
|
||||
bpl wait_for_it
|
||||
|
||||
bit KEYRESET
|
||||
|
||||
; four-digit base 5 increment
|
||||
base5_inc:
|
||||
|
||||
inc NUMBER_LOW
|
||||
lda NUMBER_LOW
|
||||
and #$f
|
||||
cmp #5
|
||||
bne base5_inc_done
|
||||
|
||||
clc
|
||||
lda NUMBER_LOW
|
||||
adc #$b
|
||||
sta NUMBER_LOW
|
||||
|
||||
lda NUMBER_LOW
|
||||
cmp #$50
|
||||
bne base5_inc_done
|
||||
|
||||
; if here, overflow to top byte
|
||||
lda #0
|
||||
sta NUMBER_LOW
|
||||
|
||||
inc NUMBER_HIGH
|
||||
lda NUMBER_HIGH
|
||||
and #$f
|
||||
cmp #5
|
||||
bne base5_inc_done
|
||||
|
||||
clc
|
||||
lda NUMBER_HIGH
|
||||
adc #$b
|
||||
sta NUMBER_HIGH
|
||||
|
||||
lda NUMBER_HIGH
|
||||
cmp #$50
|
||||
bne base5_inc_done
|
||||
|
||||
lda #$0
|
||||
sta NUMBER_HIGH
|
||||
|
||||
base5_inc_done:
|
||||
|
||||
jmp number_loop
|
||||
|
||||
;=====================
|
||||
|
||||
draw_full_dni_number:
|
||||
; ldx #1
|
||||
; stx LEADING_ZERO
|
||||
|
||||
lda NUMBER_HIGH
|
||||
beq draw_only_low_dni_number
|
||||
|
||||
; drawing high number
|
||||
|
||||
; ldx #0
|
||||
; stx LEADING_ZERO
|
||||
|
||||
jsr draw_dni_number
|
||||
|
||||
; adjust for right number
|
||||
lda #14
|
||||
bne draw_low_dni_number ; bra
|
||||
|
||||
draw_only_low_dni_number:
|
||||
|
||||
lda #7
|
||||
draw_low_dni_number:
|
||||
clc
|
||||
adc XPOS
|
||||
sta XPOS
|
||||
|
||||
lda NUMBER_LOW
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
; number in A
|
||||
|
||||
draw_dni_number:
|
||||
|
||||
sta DRAW_NUMBER
|
||||
|
||||
; draw frame
|
||||
|
||||
lda #<frame_sprite
|
||||
sta INL
|
||||
lda #>frame_sprite
|
||||
sta INH
|
||||
|
||||
jsr put_number_sprite
|
||||
|
||||
; adjust to be inside frame
|
||||
|
||||
inc YPOS
|
||||
inc XPOS
|
||||
inc XPOS
|
||||
inc XPOS
|
||||
|
||||
; draw ones values
|
||||
|
||||
lda DRAW_NUMBER
|
||||
bne regular_number
|
||||
|
||||
; lda LEADING_ZERO ; if 0 then regular
|
||||
; beq regular_number
|
||||
|
||||
; if all zeros, then draw special zero char
|
||||
|
||||
lda #<zero_sprite
|
||||
sta INL
|
||||
lda #>zero_sprite
|
||||
jmp finally_draw
|
||||
|
||||
|
||||
regular_number:
|
||||
and #$f
|
||||
tax
|
||||
|
||||
lda ones_sprites_l,X
|
||||
sta INL
|
||||
lda ones_sprites_h,X
|
||||
finally_draw:
|
||||
sta INH
|
||||
|
||||
jsr put_number_sprite
|
||||
|
||||
lda DRAW_NUMBER
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
tax
|
||||
|
||||
lda fives_sprite_l,X
|
||||
sta INL
|
||||
lda fives_sprite_h,X
|
||||
sta INH
|
||||
|
||||
jsr put_number_sprite
|
||||
|
||||
|
||||
; restore
|
||||
|
||||
dec YPOS
|
||||
dec XPOS
|
||||
dec XPOS
|
||||
dec XPOS
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
|
||||
put_number_sprite:
|
||||
|
||||
ldy #0
|
||||
lda (INL),Y
|
||||
sta pns_xsize_smc+1
|
||||
iny
|
||||
lda (INL),Y
|
||||
sta pns_ysize_smc+1
|
||||
iny
|
||||
|
||||
lda #0
|
||||
sta SPRITEY
|
||||
pns_yloop:
|
||||
|
||||
lda SPRITEY
|
||||
clc
|
||||
adc YPOS
|
||||
asl
|
||||
tax
|
||||
lda gr_offsets,X
|
||||
; clc
|
||||
adc XPOS
|
||||
sta pns_out_smc+1
|
||||
|
||||
lda gr_offsets+1,X
|
||||
; clc
|
||||
adc DRAW_PAGE
|
||||
sta pns_out_smc+2
|
||||
|
||||
lda #0
|
||||
sta SPRITEX
|
||||
pns_xloop:
|
||||
|
||||
ldx #8 ; rotate through 8 bits
|
||||
lda (INL),Y
|
||||
sta COLOR
|
||||
pns_inner_loop:
|
||||
asl COLOR
|
||||
bcc pns_transparent
|
||||
lda #$FF
|
||||
pns_out_smc:
|
||||
sta $400
|
||||
pns_transparent:
|
||||
inc pns_out_smc+1
|
||||
dex
|
||||
bne pns_inner_loop
|
||||
|
||||
iny
|
||||
|
||||
inc SPRITEX
|
||||
lda SPRITEX
|
||||
pns_xsize_smc:
|
||||
cmp #3
|
||||
bne pns_xloop
|
||||
|
||||
inc SPRITEY
|
||||
pns_ysize_smc:
|
||||
cpy #39
|
||||
bcc pns_yloop ; blt
|
||||
|
||||
rts
|
||||
|
||||
ones_sprites_l:
|
||||
.byte <empty_sprite,<one_sprite,<two_sprite,<three_sprite,<four_sprite
|
||||
ones_sprites_h:
|
||||
.byte >empty_sprite,>one_sprite,>two_sprite,>three_sprite,>four_sprite
|
||||
|
||||
fives_sprite_l:
|
||||
.byte <empty_sprite,<five_sprite,<ten_sprite,<fifteen_sprite,<twenty_sprite
|
||||
fives_sprite_h:
|
||||
.byte >empty_sprite,>five_sprite,>ten_sprite,>fifteen_sprite,>twenty_sprite
|
||||
|
||||
.include "number_sprites.inc"
|
||||
|
||||
.include "gr_offsets.s"
|
||||
|
BIN
demos/dni/riven_numbers.png
Normal file
BIN
demos/dni/riven_numbers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
126
demos/dni/zp.inc
Normal file
126
demos/dni/zp.inc
Normal file
@ -0,0 +1,126 @@
|
||||
;; Zero Page
|
||||
|
||||
;; ZX02 addresses
|
||||
|
||||
ZP=$00
|
||||
|
||||
offset = ZP+0
|
||||
ZX0_src = ZP+2
|
||||
ZX0_dst = ZP+4
|
||||
bitr = ZP+6
|
||||
pntr = ZP+7
|
||||
|
||||
; disk code
|
||||
|
||||
NIBCOUNT = $09
|
||||
CURRENT_DRIVE = $0A
|
||||
DRIVE1_DISK = $0B
|
||||
DRIVE2_DISK = $0C
|
||||
DRIVE1_TRACK = $0D
|
||||
DRIVE2_TRACK = $0E
|
||||
|
||||
|
||||
|
||||
;; Zero page monitor routines addresses
|
||||
|
||||
WNDLFT = $20
|
||||
WNDWDTH = $21
|
||||
WNDTOP = $22
|
||||
WNDBTM = $23
|
||||
CH = $24
|
||||
CV = $25
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
BASL = $28
|
||||
BASH = $29
|
||||
H2 = $2C
|
||||
X_LEFT = $2C
|
||||
V2 = $2D
|
||||
MASK = $2E
|
||||
COLOR_MASK = $2F
|
||||
COLOR = $30
|
||||
|
||||
SEEDL = $4e
|
||||
SEEDH = $4f
|
||||
XMAX = $50
|
||||
|
||||
|
||||
; note 70-7f used by disk code (?) do we need to preserve?
|
||||
|
||||
; We have to save/restore the following values
|
||||
; when loading/storing from disk
|
||||
|
||||
WHICH_LOAD = $80 ; which file to load
|
||||
|
||||
DIRECTION = $81
|
||||
DIRECTION_N = $1
|
||||
DIRECTION_S = $2
|
||||
DIRECTION_E = $4
|
||||
DIRECTION_W = $8
|
||||
DIRECTION_ANY=$f
|
||||
DIRECTION_ONLY_POINT = $40 ; do not change pointer to grab
|
||||
DIRECTION_SPLIT = $80 ; split text/graphics
|
||||
|
||||
LOCATION = $82
|
||||
|
||||
JS_BUTTON_STATE = $83
|
||||
CURRENT_DISK = $84
|
||||
JOYSTICK_ENABLED = $85
|
||||
SOUND_STATUS = $86
|
||||
SOUND_DISABLED = $80
|
||||
SOUND_IN_LC = $01 ; $01 sound effects in language card
|
||||
SOUND_MOCKINGBOARD = $02 ; mockingboard detected
|
||||
|
||||
SCENE_COUNT = $87
|
||||
ANIMATE_FRAME = $88
|
||||
LEVEL_OVER = $89
|
||||
GAME_OVER = $FF
|
||||
TOUCHED_ENEMY = $80
|
||||
NEXT_LEVEL = $01
|
||||
LOCATIONS_L = $8A
|
||||
LOCATIONS_H = $8B
|
||||
|
||||
DISP_PAGE = $8C
|
||||
DRAW_PAGE = $8D
|
||||
|
||||
WHICH_OVERLAY = $8E
|
||||
|
||||
; Riven zero page addresses
|
||||
|
||||
FRAMEL = $90
|
||||
FRAMEH = $91
|
||||
CURSOR_X = $92
|
||||
CURSOR_Y = $93
|
||||
XPOS = $94
|
||||
YPOS = $95
|
||||
LOCATION_STRUCT_L = $96
|
||||
LOCATION_STRUCT_H = $97
|
||||
IN_SPECIAL = $98
|
||||
CURSOR_VISIBLE = $99
|
||||
IN_LEFT = $9A
|
||||
IN_RIGHT = $9B
|
||||
|
||||
UPDATE_POINTER = $9C
|
||||
APPLEII_MODEL = $9D
|
||||
HGR_PAGE = $9E
|
||||
WHICH_SLOT = $9F
|
||||
|
||||
MAGLEV_FLIP_DIRECTION = $A0
|
||||
BEACH_ANIMALS_SEEN = $A1
|
||||
|
||||
LEADING_ZERO = $F2
|
||||
DRAW_NUMBER = $F3
|
||||
NUMBER_HIGH = $F4
|
||||
NUMBER_LOW = $F5
|
||||
|
||||
SPRITEX = $F6
|
||||
SPRITEY = $F7
|
||||
SPRITE_XSIZE = $F8
|
||||
TEMP = $F9
|
||||
MASKL = $FA
|
||||
MASKH = $FB
|
||||
INL = $FC
|
||||
INH = $FD
|
||||
OUTL = $FE
|
||||
OUTH = $FF
|
||||
|
Loading…
x
Reference in New Issue
Block a user