Skip to content

Instantly share code, notes, and snippets.

@fesh0r
Created July 12, 2021 09:04
Show Gist options
  • Save fesh0r/6f49ffd08e67885acbf63c343ea61799 to your computer and use it in GitHub Desktop.
Save fesh0r/6f49ffd08e67885acbf63c343ea61799 to your computer and use it in GitHub Desktop.
\ Doom Fire!
OSRDCH = &FFE0
OSWRCH = &FFEE
OSWORD = &FFF1
OSBYTE = &FFF4
OSCLI = &FFF7
CRTC_REG = &FE00
CRTC_VAL = &FE01
VIDPROC_CTL = &FE20
VIDPROC_PAL = &FE21
SVIA = &FE40
SVIA_IFR = SVIA+13
SVIA_IER = SVIA+14
UVIA = &FE60
UVIA_IFR = UVIA+13
UVIA_IER = UVIA+14
setMode = &CB33
coloursMode2 = &C42A
IRQ1V = &204
os_VIDPROC_CTL = &248
vsyncCtr = &240
intA = &FC
coloursL = &50
coloursR = &60
buffPtr = &70
buffCnt = &72
rand = &74
dispX = &76
width = 40
height = 32
buffer = &3000
buffer_len = width*height
display = &7C00+&180-4
seed = &BEEB
ORG &1C07
.start
\ EQUB &0D,&00,&0A,&F9,&D6,&90,&3A
LDA #2
JSR setMode
LDA #&E0
STA os_VIDPROC_CTL
LDY #12
.crtc_loop
LDA crtc_config,Y
STY CRTC_REG
STA CRTC_VAL
LDX coloursSrc,Y
LDA coloursMode2,X
AND #&AA
STA coloursL,Y
LSR A
STA coloursR,Y
DEY
BPL crtc_loop
LDX #width-1
LDA #12
.init_loop
STA buffer+buffer_len,X
DEX
BPL init_loop
LDA #LO(seed)
STA rand
LDA #HI(seed)
STA rand+1
LDA #LO(buffer-1)
STA buffPtr
LDA #LO(buffer_len)
STA buffCnt
.main_loop
LDA #HI(buffer-1)
STA buffPtr+1
LDA #HI(buffer_len)
STA buffCnt+1
.calc_loop
LSR rand+1
ROR rand
BCC skip_eor
LDA rand+1
EOR #&B4
STA rand+1
.skip_eor
LDY #width+1
LDA (buffPtr),Y
BEQ already_zero
SBC #0
.already_zero
LDY #1
BIT rand
BPL do_store
DEY
BVS do_store
INY
INY
.do_store
STA (buffPtr),Y
INC buffPtr
BNE skip_buff
INC buffPtr+1
.skip_buff
DEC buffCnt
BNE calc_loop
DEC buffCnt+1
BNE calc_loop
LDA vsyncCtr
.vsync_loop
CMP vsyncCtr
BEQ vsync_loop
LDY #0
STY dispX
.disp_loop
LDX buffer+&0000,Y
LDA coloursL,X
LDX buffer+&0001,Y
ORA coloursR,X
LDX dispX
STA display+&0000,X
LDX buffer+&0100,Y
LDA coloursL,X
LDX buffer+&0101,Y
ORA coloursR,X
LDX dispX
STA display+&0080,X
LDX buffer+&0200,Y
LDA coloursL,X
LDX buffer+&0201,Y
ORA coloursR,X
LDX dispX
STA display+&0100,X
LDX buffer+&0300,Y
LDA coloursL,X
LDX buffer+&0301,Y
ORA coloursR,X
LDX dispX
STA display+&0180,X
LDX buffer+&0400,Y
LDA coloursL,X
LDX buffer+&0401,Y
ORA coloursR,X
LDX dispX
STA display+&0200,X
INC dispX
INY
INY
BNE disp_loop
JMP main_loop
.coloursSrc
EQUB 0 \ black
EQUB 4 \ blue
EQUB 5 \ magenta
EQUB 5 \ magenta
EQUB 5 \ magenta
EQUB 1 \ red
EQUB 1 \ red
EQUB 1 \ red
EQUB 1 \ red
EQUB 3 \ yellow
EQUB 3 \ yellow
EQUB 3 \ yellow
EQUB 7 \ white
.crtc_config
EQUB 63 \ R0 Horizontal total
EQUB 20 \ R1 Characters per line
EQUB 39 \ R2 Horizontal sync position
EQUB &24 \ R3 Sync length
EQUB 77 \ R4 Vertical total
EQUB 0 \ R5 Vertical total adjust
EQUB 51 \ R6 Vertical displayed characters
EQUB 60 \ R7 Vertical sync position
EQUB &00 \ R8 Interlace and delay
EQUB 3 \ R9 Scan lines per character
EQUB &20 \ R10 Cursor start and type
EQUB 0 \ R11 Cursor end
EQUB &28 \ R12 Screen start high
.end
PRINT "Size: ", end-start
SAVE "Main", start, end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment