1
0
mirror of https://github.com/KarolS/millfork.git synced 2026-04-25 19:17:54 +00:00

Preliminary support for volatile variables

This commit is contained in:
Karol Stasiak
2018-12-16 21:07:04 +01:00
parent 5a99dc7293
commit 78afe3d5f5
23 changed files with 343 additions and 236 deletions
+9 -9
View File
@@ -5,21 +5,21 @@
#endif
// CIA1
byte cia1_pra @$DC00
byte cia1_prb @$DC01
volatile byte cia1_pra @$DC00
volatile byte cia1_prb @$DC01
byte cia1_ddra @$DC02
byte cia1_ddrb @$DC03
byte cia2_pra @$DD00
byte cia2_prb @$DD01
volatile byte cia2_pra @$DD00
volatile byte cia2_prb @$DD01
byte cia2_ddra @$DD02
byte cia2_ddrb @$DD03
macro asm void cia_disable_irq() {
LDA #$7f
LDA $dc0d
LDA $dd0d
LDA $dc0d
LDA $dd0d
? LDA #$7f
! LDA $dc0d
! LDA $dd0d
! LDA $dc0d
! LDA $dd0d
}
+2 -2
View File
@@ -24,5 +24,5 @@ byte sid_v3_cr @$D412
byte sid_v3_ad @$D413
byte sid_v3_sr @$D414
byte sid_paddle_x @$D419
byte sid_paddle_y @$D41A
volatile byte sid_paddle_x @$D419
volatile byte sid_paddle_y @$D41A
+3 -3
View File
@@ -24,15 +24,15 @@ byte vic_spr7_x @$D00E
byte vic_spr7_y @$D00F
byte vic_spr_hi_x @$D010
byte vic_cr1 @$D011
byte vic_raster @$D012
volatile byte vic_raster @$D012
byte vic_lp_x @$D013
byte vic_lp_y @$D014
byte vic_spr_ena @$D015
byte vic_cr2 @$D016
byte vic_spr_exp_y @$D017
byte vic_mem @$D018
byte vic_irq @$D019
byte vic_irq_ena @$D01A
volatile byte vic_irq @$D019
volatile byte vic_irq_ena @$D01A
byte vic_spr_dp @$D01B
byte vic_spr_mcolor @$D01C
byte vic_spr_exp_x @$D01D
+42 -42
View File
@@ -2,58 +2,58 @@
#warn nes_hardware module should be only used on NES/Famicom targets
#endif
byte ppu_ctrl @$2000
byte ppu_mask @$2001
byte ppu_status @$2002
byte oam_addr @$2003
byte oam_data @$2004
byte ppu_scroll @$2005
byte ppu_addr @$2006
byte ppu_data @$2007
byte oam_dma @$4014
volatile byte ppu_ctrl @$2000
volatile byte ppu_mask @$2001
volatile byte ppu_status @$2002
volatile byte oam_addr @$2003
volatile byte oam_data @$2004
volatile byte ppu_scroll @$2005
volatile byte ppu_addr @$2006
volatile byte ppu_data @$2007
volatile byte oam_dma @$4014
// TODO: better names
byte apu_pulse1_ctrl @$4000
byte apu_pulse1_sweep @$4001
word apu_pulse1_period @$4002
volatile byte apu_pulse1_ctrl @$4000
volatile byte apu_pulse1_sweep @$4001
volatile word apu_pulse1_period @$4002
byte apu_pulse2_ctrl @$4004
byte apu_pulse2_sweep @$4005
word apu_pulse2_period @$4006
volatile byte apu_pulse2_ctrl @$4004
volatile byte apu_pulse2_sweep @$4005
volatile word apu_pulse2_period @$4006
byte apu_triangle_unmute @$4008
word apu_triangle_period @$400A
volatile byte apu_triangle_unmute @$4008
volatile word apu_triangle_period @$400A
byte apu_noise_ctrl @$400C
byte apu_noise_period @$400E
volatile byte apu_noise_ctrl @$400C
volatile byte apu_noise_period @$400E
byte apu_dmc_ctrl @$4010
byte apu_dmc_load @$4011
byte apu_dmc_sample_addr @$4012
byte apu_dmc_sample_length @$4013
volatile byte apu_dmc_ctrl @$4010
volatile byte apu_dmc_load @$4011
volatile byte apu_dmc_sample_addr @$4012
volatile byte apu_dmc_sample_length @$4013
byte apu_status @$4015
byte apu_frame_counter @$4017
volatile byte apu_status @$4015
volatile byte apu_frame_counter @$4017
byte joypad1_ctrl @$4016
byte joypad2_ctrl @$4017
volatile byte joypad1_ctrl @$4016
volatile byte joypad2_ctrl @$4017
inline asm byte strobe_joypad() {
? LDA #1
STA joypad1_ctrl
LSR
STA joypad1_ctrl
! STA joypad1_ctrl
? LSR
! STA joypad1_ctrl
? RTS
}
inline asm byte read_joypad1() {
LDA joypad1_ctrl
! LDA joypad1_ctrl
? RTS
}
inline asm byte read_joypad2() {
LDA joypad2_ctrl
! LDA joypad2_ctrl
? RTS
}
@@ -62,29 +62,29 @@ macro asm void simulate_reset() {
}
inline asm void ppu_set_addr(word ax) {
STX ppu_addr
STA ppu_addr
! STX ppu_addr
! STA ppu_addr
?RTS
}
inline asm byte read_ppu_status() {
LDA ppu_status
! LDA ppu_status
? RTS
}
inline asm void ppu_set_scroll(word a, word x) {
STA ppu_scroll
STX ppu_scroll
?RTS
! STA ppu_scroll
! STX ppu_scroll
? RTS
}
inline asm void ppu_write_data(byte a) {
STA ppu_data
?RTS
! STA ppu_data
? RTS
}
inline asm void ppu_oam_dma_write(byte a) {
STA oam_dma
?RTS
! STA oam_dma
? RTS
}
+4 -4
View File
@@ -9,11 +9,11 @@ word reset_routine_addr @$FFFC
word irq_routine_addr @$FFFE
macro asm void poke(word const addr, byte a) {
STA addr
! STA addr
}
macro asm byte peek(word const addr) {
LDA addr
! LDA addr
}
macro asm void disable_irq() {
@@ -33,7 +33,7 @@ asm byte hi_nibble_to_hex(byte a) {
}
asm byte lo_nibble_to_hex(byte a) {
AND #$F
! AND #$F
CLC
ADC #$30
CMP #$3A
@@ -44,7 +44,7 @@ _lo_nibble_to_hex_lbl:
}
macro asm void panic() {
JSR _panic
? JSR _panic
}
array __constant8 = [8]
+3 -3
View File
@@ -9,11 +9,11 @@
import i80_math
macro asm void poke(word const addr, byte a) {
LD (addr), A
! LD (addr), A
}
macro asm byte peek(word const addr) {
LD A, (addr)
! LD A, (addr)
}
macro asm void disable_irq() {
@@ -51,5 +51,5 @@ _lo_nibble_to_hex_lbl:
}
macro asm void panic() {
CALL _panic
? CALL _panic
}
+86 -86
View File
@@ -3,75 +3,75 @@
#warn vcs_hardware module should be only used on Atari 2600-compatible targets
#endif
byte VSYNC @$00
byte VBLANK @$01
byte WSYNC @$02
byte RSYNC @$03
byte NUSIZ0 @$04
byte NUSIZ1 @$05
byte COLUP0 @$06
byte COLUP1 @$07
byte COLUPF @$08
byte COLUBK @$09
byte CTRLPF @$0A
byte REFP0 @$0B
byte REFP1 @$0C
byte PF0 @$0D
byte PF1 @$0E
byte PF2 @$0F
byte RESP0 @$10
byte RESP1 @$11
byte RESM0 @$12
byte RESM1 @$13
byte RESBL @$14
byte AUDC0 @$15
byte AUDC1 @$16
byte AUDF0 @$17
byte AUDF1 @$18
byte AUDV0 @$19
byte AUDV1 @$1A
byte GRP0 @$1B
byte GRP1 @$1C
byte ENAM0 @$1D
byte ENAM1 @$1E
byte ENABL @$1F
byte HMP0 @$20
byte HMP1 @$21
byte HMM0 @$22
byte HMM1 @$23
byte HMBL @$24
byte VDELP0 @$25
byte VDELP1 @$26
byte VDELBL @$27
byte RESMP0 @$28
byte RESMP1 @$29
byte HMOVE @$2A
byte HMCLR @$2B
byte CXCLR @$2C
byte CXM0P @$30
byte CXM1P @$31
byte CXP0FB @$32
byte CXP1FB @$33
byte CXM0FB @$34
byte CXM1FB @$35
byte CXBLPF @$36
byte CXPPMM @$37
byte INPT0 @$38
byte INPT1 @$39
byte INPT2 @$3A
byte INPT3 @$3B
byte INPT4 @$3C
byte INPT5 @$3D
byte SWCHA @$0280
byte SWACNT @$0281
byte SWCHB @$0282
byte SWBCNT @$0283
byte INTIM @$0284
byte INSTAT @$0285
byte TIM1T @$0294
byte TIM8T @$0295
byte TIM64T @$0296
byte T1024T @$0297
volatile byte VSYNC @$00
volatile byte VBLANK @$01
volatile byte WSYNC @$02
volatile byte RSYNC @$03
volatile byte NUSIZ0 @$04
volatile byte NUSIZ1 @$05
volatile byte COLUP0 @$06
volatile byte COLUP1 @$07
volatile byte COLUPF @$08
volatile byte COLUBK @$09
volatile byte CTRLPF @$0A
volatile byte REFP0 @$0B
volatile byte REFP1 @$0C
volatile byte PF0 @$0D
volatile byte PF1 @$0E
volatile byte PF2 @$0F
volatile byte RESP0 @$10
volatile byte RESP1 @$11
volatile byte RESM0 @$12
volatile byte RESM1 @$13
volatile byte RESBL @$14
volatile byte AUDC0 @$15
volatile byte AUDC1 @$16
volatile byte AUDF0 @$17
volatile byte AUDF1 @$18
volatile byte AUDV0 @$19
volatile byte AUDV1 @$1A
volatile byte GRP0 @$1B
volatile byte GRP1 @$1C
volatile byte ENAM0 @$1D
volatile byte ENAM1 @$1E
volatile byte ENABL @$1F
volatile byte HMP0 @$20
volatile byte HMP1 @$21
volatile byte HMM0 @$22
volatile byte HMM1 @$23
volatile byte HMBL @$24
volatile byte VDELP0 @$25
volatile byte VDELP1 @$26
volatile byte VDELBL @$27
volatile byte RESMP0 @$28
volatile byte RESMP1 @$29
volatile byte HMOVE @$2A
volatile byte HMCLR @$2B
volatile byte CXCLR @$2C
volatile byte CXM0P @$30
volatile byte CXM1P @$31
volatile byte CXP0FB @$32
volatile byte CXP1FB @$33
volatile byte CXM0FB @$34
volatile byte CXM1FB @$35
volatile byte CXBLPF @$36
volatile byte CXPPMM @$37
volatile byte INPT0 @$38
volatile byte INPT1 @$39
volatile byte INPT2 @$3A
volatile byte INPT3 @$3B
volatile byte INPT4 @$3C
volatile byte INPT5 @$3D
volatile byte SWCHA @$0280
volatile byte SWACNT @$0281
volatile byte SWCHB @$0282
volatile byte SWBCNT @$0283
volatile byte INTIM @$0284
volatile byte INSTAT @$0285
volatile byte TIM1T @$0294
volatile byte TIM8T @$0295
volatile byte TIM64T @$0296
volatile byte T1024T @$0297
macro asm void wsync() {
@@ -79,28 +79,28 @@ macro asm void wsync() {
}
macro asm void start_frame() {
LDA #0
STA VBLANK
LDA #2
STA VSYNC
STA WSYNC
STA WSYNC
STA WSYNC
LDA #0
STA VSYNC
LDX #37
? LDA #0
! STA VBLANK
? LDA #2
! STA VSYNC
! STA WSYNC
! STA WSYNC
! STA WSYNC
! LDA #0
! STA VSYNC
? LDX #37
start_frame_loop:
STA WSYNC
DEX
! STA WSYNC
? DEX
BNE start_frame_loop
}
macro asm void end_frame() {
LDA #%01000010
STA VBLANK
LDX #30
? LDA #%01000010
! STA VBLANK
? LDX #30
end_frame_loop:
STA WSYNC
DEX
! STA WSYNC
? DEX
BNE end_frame_loop
}