apple1/ROM development/8x8art.asm

96 lines
1.9 KiB
NASM

;printing 8x8 picture in the center with '*'
PIC_WIDTH = 8
PIC_HEIGHT = 8
OFFSET_X = (40 - PIC_WIDTH)/2
PIC_ADDRESS = $1111
ROW_ADDRESS = PIC_ADDRESS + PIC_HEIGHT
; Y - row number
; X - column (pixel) number
JSR NEXT_ROW
LDA #$0
STA ROW_ADDRESS ;initialize row counter with 0
LDY #PIC_HEIGHT
ROWS_LOOP: JSR PRINT_OFFSET
LDA ROW_ADDRESS
TAX
LDA PIC_ADDRESS, X
LDX #PIC_WIDTH
NEXT_PIXEL: ASL
BCC NO_PIXEL
JSR PRINT_STAR
JMP AFTER_PIXEL
NO_PIXEL: JSR PRINT_BLANK
AFTER_PIXEL: DEX
BNE NEXT_PIXEL
JSR NEXT_ROW
INC ROW_ADDRESS
DEY
BNE ROWS_LOOP
JSR NEXT_ROW
JMP RESET
;printing offset subroutine (optional: save registers A and X)
PRINT_OFFSET: PHA ;save A
TXA ;X->A
PHA ;save X
LDX #OFFSET_X
OFFSET_LOOP: LDA #' '
JSR ECHO
DEX
BNE OFFSET_LOOP
PLA ;restore X
TAX ;A->X
PLA ;restore A
RTS
PRINT_STAR: PHA
LDA #'*'
JSR ECHO
PLA
RTS
PRINT_BLANK: PHA
LDA #' '
JSR ECHO
PLA
RTS
NEXT_ROW: PHA
LDA #$0d
JSR ECHO
PLA
RTS
;from HeartPicture
;to PIC_ADDRESS ($88)
COPY_HEART: PHA
TXA
PHA
LDX #PIC_HEIGHT
COPY_LOOP: LDA HeartPicture, X
STA PIC_ADDRESS, X
DEX
BPL COPY_LOOP
PLA
TAX
PLA
RTS
HeartPicture:
.byte %00000000
.byte %01100110
.byte %11111111
.byte %11111111
.byte %11111111
.byte %01111110
.byte %00111100
.byte %00011000
SmileyPicture: .byte $3c, $42, $a5, $81, $a5, $99, $42, $3c
WozPicture: .byte $88, $a8, $50, $07, $61, $92, $94, $67
SmartyLogo: .byte $ff, $81, $bd, $bd, $bd, $bd, $81, $ff
RocketPicture: .byte $18, $24, $24, $24, $7e, $a5, $FF, $a5
.byte "8*8 Pixel Art program end", $0d, $00