От безделья засел за изучение компьютера. Эмулятор у меня уже был, взялся за поиск ассемблера и сборки .PRG
Нашелся один из вариантов (dasm 2.20.07)
;DASM C64 BASIC stub
processor 6502
org $801
dc.w nxt_line ; Calculate pointer to next BASIC line
dc.w 2012 ; BASIC Line# (change this to any # you want)
hex 9e ; BASIC token for SYS
if ml_start ; If ml_start not defined, skip it for now
dc.b [ml_start]d ; ML start address (use any address here) 2061
endif
hex 00 ; End of BASIC line
nxt_line hex 00 00 ; The next BASIC line would start here
ml_start
ldy #00
loop
;the screen ram (default $0400-$07FF) that stores the characters (or 'tiles') codes
;the color ram ($D800-$DBFF) that stores the foreground color of each character
;the character rom ($D000-$DFFF) that defines characters pixels (kind of Font)
tya
sta $400,y
sta $D800,y
; sta $D000,y
iny
bne loop
rts ;Just giving the compiler something to do
processor 6502
org $801
dc.w nxt_line ; Calculate pointer to next BASIC line
dc.w 2012 ; BASIC Line# (change this to any # you want)
hex 9e ; BASIC token for SYS
if ml_start ; If ml_start not defined, skip it for now
dc.b [ml_start]d ; ML start address (use any address here) 2061
endif
hex 00 ; End of BASIC line
nxt_line hex 00 00 ; The next BASIC line would start here
ml_start
ldy #00
loop
;the screen ram (default $0400-$07FF) that stores the characters (or 'tiles') codes
;the color ram ($D800-$DBFF) that stores the foreground color of each character
;the character rom ($D000-$DFFF) that defines characters pixels (kind of Font)
tya
sta $400,y
sta $D800,y
; sta $D000,y
iny
bne loop
rts ;Just giving the compiler something to do
получился .prg - программа на BASIC, которая содержит в себе сам код и старт программы в виде токена SYSадрес.
Сам код заполняет значениями символов и область памяти, которая отвечает за цвет.
Для удобства я решил пересесть на привычный ассемблер ACME, который заточен под С64, заодно при чтении доков выяснилось, что текстовый режим не так уж и прост
!to "test2.prg", cbm ; #name of output, type of assembly
!cpu 6502 ; type of cpu
* = $0801 ; set assembler context, where to operate.
!word nxt_line ; Calculate pointer to next BASIC line
!word 2012 ; BASIC Line# (change this to any # you want)
!byte $9e ; BASIC token for SYS
; if ml_start ; If ml_start not defined, skip it for now
; dc.b [ml_start]d ; ML start address (use any address here) 2061
!byte $32,$30,$36,$31
; endif
!byte 0;hex 00 ; End of BASIC line
nxt_line !byte 0,0 ; hex 00 00 ; The next BASIC line would start here
ml_start
ldy #00
sei
;$D018 = %xxxx100x -> charmem is at $2000
;$D018 = %xxxx1xxx -> bitmap is at $2000
;$D018 = %0001xxxx -> screenmem is at $0400
lda #$18 ; screen at $0400, chars at $2000
sta $d018
loop
;?$dd00 -> $00 (bank 3, ie $c000 - $ffff)
;?$d018 -> $04 (screen at $c000, charset at $d000)
tya
sta $400,y ;Screen memory - for text mode
sta $D800,y ;Color memory - for text mode
sta $2000,y ;character data
iny
bne loop
rts ;Just giving the compiler something to do
После некоторых мучений удалось слепить почти 1К интро со звуком. Теперь решил заняться спрайтами и после мучений получил изображение. Об этом следующий пост.
Комментарии
Отправить комментарий