mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-10-21 17:24:39 +00:00
Updated Atari 2600 minial sample.
This commit is contained in:
parent
26718942e9
commit
c2993e4d82
128
src/main/kc/include/atari-tia.h
Normal file
128
src/main/kc/include/atari-tia.h
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
// Atari Television Interface Adaptor (TIA)
|
||||||
|
// https://en.wikipedia.org/wiki/Television_Interface_Adaptor
|
||||||
|
// http://www.qotile.net/minidig/docs/stella.pdf
|
||||||
|
|
||||||
|
struct ATARI_TIA_WRITE {
|
||||||
|
// $00 0000 00x0 Vertical Sync Set-Clear
|
||||||
|
char VSYNC;
|
||||||
|
// $01 xx00 00x0 Vertical Blank Set-Clear
|
||||||
|
char VBLANK;
|
||||||
|
// $02 ---- ---- Wait for Horizontal Blank
|
||||||
|
char WSYNC;
|
||||||
|
// $03 ---- ---- Reset Horizontal Sync Counter
|
||||||
|
char RSYNC;
|
||||||
|
// $04 00xx 0xxx Number-Size player/missle 0
|
||||||
|
char NUSIZ0;
|
||||||
|
// $05 00xx 0xxx Number-Size player/missle 1
|
||||||
|
char NUSIZ1;
|
||||||
|
// $06 xxxx xxx0 Color-Luminance Player 0
|
||||||
|
char COLUP0;
|
||||||
|
// $07 xxxx xxx0 Color-Luminance Player 1
|
||||||
|
char COLUP1;
|
||||||
|
// $08 xxxx xxx0 Color-Luminance Playfield
|
||||||
|
char COLUPF;
|
||||||
|
// $09 xxxx xxx0 Color-Luminance Background
|
||||||
|
char COLUBK;
|
||||||
|
// $0A 00xx 0xxx Control Playfield, Ball, Collisions
|
||||||
|
char CTRLPF;
|
||||||
|
// $0B 0000 x000 Reflection Player 0
|
||||||
|
char REFP0;
|
||||||
|
// $0C 0000 x000 Reflection Player 1
|
||||||
|
char REFP1;
|
||||||
|
// $0D xxxx 0000 Playfield Register Byte 0
|
||||||
|
char PF0;
|
||||||
|
// $0E xxxx xxxx Playfield Register Byte 1
|
||||||
|
char PF1;
|
||||||
|
// $0F xxxx xxxx Playfield Register Byte 2
|
||||||
|
char PF2;
|
||||||
|
// $10 ---- ---- Reset Player 0
|
||||||
|
char RESP0;
|
||||||
|
// $11 ---- ---- Reset Player 1
|
||||||
|
char RESP1;
|
||||||
|
// $12 ---- ---- Reset Missle 0
|
||||||
|
char RESM0;
|
||||||
|
// $13 ---- ---- Reset Missle 1
|
||||||
|
char RESM1;
|
||||||
|
// $14 ---- ---- Reset Ball
|
||||||
|
char RESBL;
|
||||||
|
// $15 0000 xxxx Audio Control 0
|
||||||
|
char AUDC0;
|
||||||
|
// $16 0000 xxxx Audio Control 1
|
||||||
|
char AUDC1;
|
||||||
|
// $17 000x xxxx Audio Frequency 0
|
||||||
|
char AUDF0;
|
||||||
|
// $18 000x xxxx Audio Frequency 1
|
||||||
|
char AUDF1;
|
||||||
|
// $19 0000 xxxx Audio Volume 0
|
||||||
|
char AUDV0;
|
||||||
|
// $1A 0000 xxxx Audio Volume 1
|
||||||
|
char AUDV1;
|
||||||
|
// $1B xxxx xxxx Graphics Register Player 0
|
||||||
|
char GRP0;
|
||||||
|
// $1C xxxx xxxx Graphics Register Player 1
|
||||||
|
char GRP1;
|
||||||
|
// $1D 0000 00x0 Graphics Enable Missle 0
|
||||||
|
char ENAM0;
|
||||||
|
// $1E 0000 00x0 Graphics Enable Missle 1
|
||||||
|
char ENAM1;
|
||||||
|
// $1F 0000 00x0 Graphics Enable Ball
|
||||||
|
char ENABL;
|
||||||
|
// $20 xxxx 0000 Horizontal Motion Player 0
|
||||||
|
char HMP0;
|
||||||
|
// $21 xxxx 0000 Horizontal Motion Player 1
|
||||||
|
char HMP1;
|
||||||
|
// $22 xxxx 0000 Horizontal Motion Missle 0
|
||||||
|
char HMM0;
|
||||||
|
// $23 xxxx 0000 Horizontal Motion Missle 1
|
||||||
|
char HMM1;
|
||||||
|
// $24 xxxx 0000 Horizontal Motion Ball
|
||||||
|
char HMBL;
|
||||||
|
// $25 0000 000x Vertical Delay Player 0
|
||||||
|
char VDELP0;
|
||||||
|
// $26 0000 000x Vertical Delay Player 1
|
||||||
|
char VDELP1;
|
||||||
|
// $27 0000 000x Vertical Delay Ball
|
||||||
|
char VDELBL;
|
||||||
|
// $28 0000 00x0 Reset Missle 0 to Player 0
|
||||||
|
char RESMP0;
|
||||||
|
// $29 0000 00x0 Reset Missle 1 to Player 1
|
||||||
|
char RESMP1;
|
||||||
|
// $2A ---- ---- Apply Horizontal Motion
|
||||||
|
char HMOVE;
|
||||||
|
// $2B ---- ---- Clear Horizontal Move Registers
|
||||||
|
char HMCLR;
|
||||||
|
// $2C ---- ---- Clear Collision Latches
|
||||||
|
char CXCLR;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ATARI_TIA_READ {
|
||||||
|
// bit 7 bit 6
|
||||||
|
// $00 xx00 0000 Read Collision M0-P1 M0-P0
|
||||||
|
char CXM0P;
|
||||||
|
// $01 xx00 0000 Read Collision M1-P0 M1-P1
|
||||||
|
char CXM1P;
|
||||||
|
// $02 xx00 0000 Read Collision P0-PF P0-BL
|
||||||
|
char CXP0FB;
|
||||||
|
// $03 xx00 0000 Read Collision P1-PF P1-BL
|
||||||
|
char CXP1FB;
|
||||||
|
// $04 xx00 0000 Read Collision M0-PF M0-BL
|
||||||
|
char CXM0FB;
|
||||||
|
// $05 xx00 0000 Read Collision M1-PF M1-BL
|
||||||
|
char CXM1FB;
|
||||||
|
// $06 x000 0000 Read Collision BL-PF -----
|
||||||
|
char CXBLPF;
|
||||||
|
// $07 xx00 0000 Read Collision P0-P1 M0-M1
|
||||||
|
char CXPPMM;
|
||||||
|
// $08 x000 0000 Read Pot Port 0
|
||||||
|
char INPT0;
|
||||||
|
// $09 x000 0000 Read Pot Port 1
|
||||||
|
char INPT1;
|
||||||
|
// $0A x000 0000 Read Pot Port 2
|
||||||
|
char INPT2;
|
||||||
|
// $0B x000 0000 Read Pot Port 3
|
||||||
|
char INPT3;
|
||||||
|
// $0C x000 0000 Read Input (Trigger) 0
|
||||||
|
char INPT4;
|
||||||
|
// $0D x000 0000 Read Input (Trigger) 1
|
||||||
|
char INPT5;
|
||||||
|
};
|
14
src/main/kc/include/atari2600.h
Normal file
14
src/main/kc/include/atari2600.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Atari 2600 Registers and Constants
|
||||||
|
// https://web.archive.org/web/20170215054248/http://www.atariguide.com/pdfs/Atari_2600_VCS_Domestic_Field_Service_Manual.pdf
|
||||||
|
|
||||||
|
#include <atari-tia.h>
|
||||||
|
#include <mos6532.h>
|
||||||
|
|
||||||
|
// Atari TIA write registers
|
||||||
|
struct ATARI_TIA_WRITE * const TIA = 0x00;
|
||||||
|
|
||||||
|
// Atari TIA read registers
|
||||||
|
struct ATARI_TIA_READ * const TIA_READ = 0x00;
|
||||||
|
|
||||||
|
// Atari RIOT registers
|
||||||
|
struct MOS6532_RIOT * const RIOT = 0x280;
|
27
src/main/kc/include/mos6532.h
Normal file
27
src/main/kc/include/mos6532.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// MOS 6532 RAM-I/O-Timer (RIOT)
|
||||||
|
// http://www.ionpool.net/arcade/gottlieb/technical/datasheets/R6532_datasheet.pdf
|
||||||
|
// http://www.qotile.net/minidig/docs/stella.pdf
|
||||||
|
// https://en.wikipedia.org/wiki/MOS_Technology_6532
|
||||||
|
|
||||||
|
struct MOS6532_RIOT {
|
||||||
|
// $280 Port A data register for joysticks: Bits 4-7 for player 1. Bits 0-3 for player 2.
|
||||||
|
char SWCHA;
|
||||||
|
// $281 Port A data direction register (DDR)
|
||||||
|
char SWACNT;
|
||||||
|
// $282 Port B data (console switches)
|
||||||
|
char SWCHB;
|
||||||
|
// $283 Port B DDR
|
||||||
|
char SWBCNT;
|
||||||
|
// $284 Timer output
|
||||||
|
char INTIM;
|
||||||
|
// Unused/undefined registers ($285-$294)
|
||||||
|
char UNUSED[15];
|
||||||
|
// $294 set 1 clock interval
|
||||||
|
char TIM1T;
|
||||||
|
// $295 set 8 clock interval
|
||||||
|
char TIM8T;
|
||||||
|
// $296 set 64 clock interval
|
||||||
|
char TIM64T;
|
||||||
|
// $297 set 1024 clock interval
|
||||||
|
char T1024T;
|
||||||
|
};
|
@ -1,10 +1,7 @@
|
|||||||
// Minimal Atari 2600 VCS Program
|
// Minimal Atari 2600 VCS Program
|
||||||
|
// Source: https://atariage.com/forums/blogs/entry/11109-step-1-generate-a-stable-display/
|
||||||
#pragma target(atari2600)
|
#pragma target(atari2600)
|
||||||
|
#include <atari2600.h>
|
||||||
char * const VSYNC = 0x00;
|
|
||||||
char * const VBLANK = 0x01;
|
|
||||||
char * const WSYNC = 0x02;
|
|
||||||
char * const BACKGROUND_COLOR = 0x09;
|
|
||||||
|
|
||||||
char __mem col=0;
|
char __mem col=0;
|
||||||
|
|
||||||
@ -15,36 +12,36 @@ void main() {
|
|||||||
// here we generate the signal that tells the TV to move the beam to the top of
|
// here we generate the signal that tells the TV to move the beam to the top of
|
||||||
// the screen so we can start the next frame of video.
|
// the screen so we can start the next frame of video.
|
||||||
// The Sync Signal must be on for 3 scanlines.
|
// The Sync Signal must be on for 3 scanlines.
|
||||||
*WSYNC = 2; // Wait for SYNC (halts CPU until end of scanline)
|
TIA->WSYNC = 2; // Wait for SYNC (halts CPU until end of scanline)
|
||||||
*VSYNC = 2; // Accumulator D1=1, turns on Vertical Sync signal
|
TIA->VSYNC = 2; // Accumulator D1=1, turns on Vertical Sync signal
|
||||||
*WSYNC = 2; // Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
TIA->WSYNC = 2; // Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
||||||
*WSYNC = 2; // wait until end of 2nd scanline of VSYNC
|
TIA->WSYNC = 2; // wait until end of 2nd scanline of VSYNC
|
||||||
*WSYNC = 0; // wait until end of 3rd scanline of VSYNC
|
TIA->WSYNC = 0; // wait until end of 3rd scanline of VSYNC
|
||||||
*VSYNC = 0; // Accumulator D1=0, turns off Vertical Sync signal
|
TIA->VSYNC = 0; // Accumulator D1=0, turns off Vertical Sync signal
|
||||||
|
|
||||||
// Vertical Blank - game logic
|
// Vertical Blank - game logic
|
||||||
// Since we don't have any yet, just delay
|
// Since we don't have any yet, just delay
|
||||||
for(char i=0;i<37;i++) {
|
for(char i=0;i<37;i++) {
|
||||||
*WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
TIA->WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Screen - display logic
|
// Screen - display logic
|
||||||
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
||||||
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
||||||
*VBLANK = 0; // D1=1, turns off Vertical Blank signal (image output on)
|
TIA->VBLANK = 0; // D1=1, turns off Vertical Blank signal (image output on)
|
||||||
char c = col++;
|
char c = col++;
|
||||||
for(char i=0;i<192;i++) {
|
for(char i=0;i<192;i++) {
|
||||||
*WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
TIA->WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
||||||
*BACKGROUND_COLOR = c++; // Set background color
|
TIA->COLUBK = c++; // Set background color
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overscan - game logic
|
// Overscan - game logic
|
||||||
// Since we don't have any yet, just delay
|
// Since we don't have any yet, just delay
|
||||||
*WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
TIA->WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
||||||
*VBLANK = 2; // // D1=1 turns image output off
|
TIA->VBLANK = 2; // // D1=1 turns image output off
|
||||||
*BACKGROUND_COLOR = 0;
|
TIA->COLUBK = 0;
|
||||||
for(char i=0;i<07;i++) {
|
for(char i=0;i<07;i++) {
|
||||||
*WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
TIA->WSYNC = 0; // Wait for SYNC (halts CPU until end of scanline)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// Minimal Atari 2600 VCS Program
|
// Minimal Atari 2600 VCS Program
|
||||||
|
// Source: https://atariage.com/forums/blogs/entry/11109-step-1-generate-a-stable-display/
|
||||||
// Atari 2600 VCS 4K ROM
|
// Atari 2600 VCS 4K ROM
|
||||||
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
||||||
.segmentdef Code [start=$f800,min=$f800,max=$fff9]
|
.segmentdef Code [start=$f800,min=$f800,max=$fff9]
|
||||||
@ -10,37 +11,38 @@
|
|||||||
.word main // IRQ
|
.word main // IRQ
|
||||||
.segment Code
|
.segment Code
|
||||||
|
|
||||||
.label VSYNC = 0
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC = 2
|
||||||
.label VBLANK = 1
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK = 1
|
||||||
.label WSYNC = 2
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK = 9
|
||||||
.label BACKGROUND_COLOR = 9
|
// Atari TIA write registers
|
||||||
|
.label TIA = 0
|
||||||
.segment Code
|
.segment Code
|
||||||
main: {
|
main: {
|
||||||
lda #0
|
lda #0
|
||||||
sta col
|
sta col
|
||||||
__b2:
|
__b2:
|
||||||
// *WSYNC = 2
|
// TIA->WSYNC = 2
|
||||||
// Vertical Sync
|
// Vertical Sync
|
||||||
// here we generate the signal that tells the TV to move the beam to the top of
|
// here we generate the signal that tells the TV to move the beam to the top of
|
||||||
// the screen so we can start the next frame of video.
|
// the screen so we can start the next frame of video.
|
||||||
// The Sync Signal must be on for 3 scanlines.
|
// The Sync Signal must be on for 3 scanlines.
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *VSYNC = 2
|
// TIA->VSYNC = 2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
sta VSYNC
|
sta TIA
|
||||||
// *WSYNC = 2
|
// TIA->WSYNC = 2
|
||||||
// Accumulator D1=1, turns on Vertical Sync signal
|
// Accumulator D1=1, turns on Vertical Sync signal
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
// wait until end of 2nd scanline of VSYNC
|
// wait until end of 2nd scanline of VSYNC
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *VSYNC = 0
|
// TIA->VSYNC = 0
|
||||||
// wait until end of 3rd scanline of VSYNC
|
// wait until end of 3rd scanline of VSYNC
|
||||||
sta VSYNC
|
sta TIA
|
||||||
tax
|
tax
|
||||||
// Vertical Blank - game logic
|
// Vertical Blank - game logic
|
||||||
// Since we don't have any yet, just delay
|
// Since we don't have any yet, just delay
|
||||||
@ -48,12 +50,12 @@ main: {
|
|||||||
// for(char i=0;i<37;i++)
|
// for(char i=0;i<37;i++)
|
||||||
cpx #$25
|
cpx #$25
|
||||||
bcc __b4
|
bcc __b4
|
||||||
// *VBLANK = 0
|
// TIA->VBLANK = 0
|
||||||
// Screen - display logic
|
// Screen - display logic
|
||||||
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
||||||
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
||||||
lda #0
|
lda #0
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// c = col++
|
// c = col++
|
||||||
// D1=1, turns off Vertical Blank signal (image output on)
|
// D1=1, turns off Vertical Blank signal (image output on)
|
||||||
ldx col
|
ldx col
|
||||||
@ -63,19 +65,19 @@ main: {
|
|||||||
// for(char i=0;i<192;i++)
|
// for(char i=0;i<192;i++)
|
||||||
cpy #$c0
|
cpy #$c0
|
||||||
bcc __b7
|
bcc __b7
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
// Overscan - game logic
|
// Overscan - game logic
|
||||||
// Since we don't have any yet, just delay
|
// Since we don't have any yet, just delay
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *VBLANK = 2
|
// TIA->VBLANK = 2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
lda #2
|
lda #2
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// *BACKGROUND_COLOR = 0
|
// TIA->COLUBK = 0
|
||||||
// // D1=1 turns image output off
|
// // D1=1 turns image output off
|
||||||
lda #0
|
lda #0
|
||||||
sta BACKGROUND_COLOR
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
tax
|
tax
|
||||||
__b9:
|
__b9:
|
||||||
// for(char i=0;i<07;i++)
|
// for(char i=0;i<07;i++)
|
||||||
@ -83,28 +85,28 @@ main: {
|
|||||||
bcc __b10
|
bcc __b10
|
||||||
jmp __b2
|
jmp __b2
|
||||||
__b10:
|
__b10:
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// for(char i=0;i<07;i++)
|
// for(char i=0;i<07;i++)
|
||||||
inx
|
inx
|
||||||
jmp __b9
|
jmp __b9
|
||||||
__b7:
|
__b7:
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *BACKGROUND_COLOR = c++
|
// TIA->COLUBK = c++
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
stx BACKGROUND_COLOR
|
stx TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
// *BACKGROUND_COLOR = c++;
|
// TIA->COLUBK = c++;
|
||||||
inx
|
inx
|
||||||
// for(char i=0;i<192;i++)
|
// for(char i=0;i<192;i++)
|
||||||
iny
|
iny
|
||||||
jmp __b6
|
jmp __b6
|
||||||
__b4:
|
__b4:
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// for(char i=0;i<37;i++)
|
// for(char i=0;i<37;i++)
|
||||||
inx
|
inx
|
||||||
jmp __b3
|
jmp __b3
|
||||||
|
@ -16,19 +16,19 @@ main::@1: scope:[main] from main main::@9
|
|||||||
[5] (byte) col#12 ← phi( main/(byte) 0 main::@9/(byte) col#1 )
|
[5] (byte) col#12 ← phi( main/(byte) 0 main::@9/(byte) col#1 )
|
||||||
to:main::@2
|
to:main::@2
|
||||||
main::@2: scope:[main] from main::@1
|
main::@2: scope:[main] from main::@1
|
||||||
[6] *((const nomodify byte*) WSYNC) ← (byte) 2
|
[6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2
|
||||||
[7] *((const nomodify byte*) VSYNC) ← (byte) 2
|
[7] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 2
|
||||||
[8] *((const nomodify byte*) WSYNC) ← (byte) 2
|
[8] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2
|
||||||
[9] *((const nomodify byte*) WSYNC) ← (byte) 2
|
[9] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2
|
||||||
[10] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[11] *((const nomodify byte*) VSYNC) ← (byte) 0
|
[11] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 0
|
||||||
to:main::@3
|
to:main::@3
|
||||||
main::@3: scope:[main] from main::@2 main::@4
|
main::@3: scope:[main] from main::@2 main::@4
|
||||||
[12] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 )
|
[12] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 )
|
||||||
[13] if((byte) main::i#2<(byte) $25) goto main::@4
|
[13] if((byte) main::i#2<(byte) $25) goto main::@4
|
||||||
to:main::@5
|
to:main::@5
|
||||||
main::@5: scope:[main] from main::@3
|
main::@5: scope:[main] from main::@3
|
||||||
[14] *((const nomodify byte*) VBLANK) ← (byte) 0
|
[14] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 0
|
||||||
[15] (byte) main::c#0 ← (byte) col#12
|
[15] (byte) main::c#0 ← (byte) col#12
|
||||||
[16] (byte) col#1 ← ++ (byte) col#12
|
[16] (byte) col#1 ← ++ (byte) col#12
|
||||||
to:main::@6
|
to:main::@6
|
||||||
@ -38,25 +38,25 @@ main::@6: scope:[main] from main::@5 main::@7
|
|||||||
[18] if((byte) main::i1#2<(byte) $c0) goto main::@7
|
[18] if((byte) main::i1#2<(byte) $c0) goto main::@7
|
||||||
to:main::@8
|
to:main::@8
|
||||||
main::@8: scope:[main] from main::@6
|
main::@8: scope:[main] from main::@6
|
||||||
[19] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[19] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[20] *((const nomodify byte*) VBLANK) ← (byte) 2
|
[20] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 2
|
||||||
[21] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) 0
|
[21] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) 0
|
||||||
to:main::@9
|
to:main::@9
|
||||||
main::@9: scope:[main] from main::@10 main::@8
|
main::@9: scope:[main] from main::@10 main::@8
|
||||||
[22] (byte) main::i2#2 ← phi( main::@10/(byte) main::i2#1 main::@8/(byte) 0 )
|
[22] (byte) main::i2#2 ← phi( main::@10/(byte) main::i2#1 main::@8/(byte) 0 )
|
||||||
[23] if((byte) main::i2#2<(byte) 7) goto main::@10
|
[23] if((byte) main::i2#2<(byte) 7) goto main::@10
|
||||||
to:main::@1
|
to:main::@1
|
||||||
main::@10: scope:[main] from main::@9
|
main::@10: scope:[main] from main::@9
|
||||||
[24] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[24] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[25] (byte) main::i2#1 ← ++ (byte) main::i2#2
|
[25] (byte) main::i2#1 ← ++ (byte) main::i2#2
|
||||||
to:main::@9
|
to:main::@9
|
||||||
main::@7: scope:[main] from main::@6
|
main::@7: scope:[main] from main::@6
|
||||||
[26] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[26] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[27] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) main::c#2
|
[27] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) main::c#2
|
||||||
[28] (byte) main::c#1 ← ++ (byte) main::c#2
|
[28] (byte) main::c#1 ← ++ (byte) main::c#2
|
||||||
[29] (byte) main::i1#1 ← ++ (byte) main::i1#2
|
[29] (byte) main::i1#1 ← ++ (byte) main::i1#2
|
||||||
to:main::@6
|
to:main::@6
|
||||||
main::@4: scope:[main] from main::@3
|
main::@4: scope:[main] from main::@3
|
||||||
[30] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[30] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[31] (byte) main::i#1 ← ++ (byte) main::i#2
|
[31] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||||
to:main::@3
|
to:main::@3
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
Fixing struct type size struct MOS6532_RIOT to 24
|
||||||
|
Fixing struct type SIZE_OF struct MOS6532_RIOT to 24
|
||||||
|
Fixing struct type SIZE_OF struct MOS6532_RIOT to 24
|
||||||
|
|
||||||
CONTROL FLOW GRAPH SSA
|
CONTROL FLOW GRAPH SSA
|
||||||
@begin: scope:[] from
|
@begin: scope:[] from
|
||||||
@ -15,12 +18,12 @@ main::@1: scope:[main] from main main::@9
|
|||||||
to:main::@return
|
to:main::@return
|
||||||
main::@2: scope:[main] from main::@1
|
main::@2: scope:[main] from main::@1
|
||||||
(byte) col#12 ← phi( main::@1/(byte) col#8 )
|
(byte) col#12 ← phi( main::@1/(byte) col#8 )
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 2
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 2
|
||||||
*((const nomodify byte*) VSYNC) ← (number) 2
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (number) 2
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 2
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 2
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 2
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 2
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
*((const nomodify byte*) VSYNC) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (number) 0
|
||||||
(byte) main::i#0 ← (byte) 0
|
(byte) main::i#0 ← (byte) 0
|
||||||
to:main::@3
|
to:main::@3
|
||||||
main::@3: scope:[main] from main::@2 main::@4
|
main::@3: scope:[main] from main::@2 main::@4
|
||||||
@ -32,12 +35,12 @@ main::@3: scope:[main] from main::@2 main::@4
|
|||||||
main::@4: scope:[main] from main::@3
|
main::@4: scope:[main] from main::@3
|
||||||
(byte) col#13 ← phi( main::@3/(byte) col#7 )
|
(byte) col#13 ← phi( main::@3/(byte) col#7 )
|
||||||
(byte) main::i#3 ← phi( main::@3/(byte) main::i#2 )
|
(byte) main::i#3 ← phi( main::@3/(byte) main::i#2 )
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
(byte) main::i#1 ← ++ (byte) main::i#3
|
(byte) main::i#1 ← ++ (byte) main::i#3
|
||||||
to:main::@3
|
to:main::@3
|
||||||
main::@5: scope:[main] from main::@3
|
main::@5: scope:[main] from main::@3
|
||||||
(byte) col#4 ← phi( main::@3/(byte) col#7 )
|
(byte) col#4 ← phi( main::@3/(byte) col#7 )
|
||||||
*((const nomodify byte*) VBLANK) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (number) 0
|
||||||
(byte) main::c#0 ← (byte) col#4
|
(byte) main::c#0 ← (byte) col#4
|
||||||
(byte) col#1 ← ++ (byte) col#4
|
(byte) col#1 ← ++ (byte) col#4
|
||||||
(byte) main::i1#0 ← (byte) 0
|
(byte) main::i1#0 ← (byte) 0
|
||||||
@ -53,16 +56,16 @@ main::@7: scope:[main] from main::@6
|
|||||||
(byte) col#17 ← phi( main::@6/(byte) col#16 )
|
(byte) col#17 ← phi( main::@6/(byte) col#16 )
|
||||||
(byte) main::i1#3 ← phi( main::@6/(byte) main::i1#2 )
|
(byte) main::i1#3 ← phi( main::@6/(byte) main::i1#2 )
|
||||||
(byte) main::c#2 ← phi( main::@6/(byte) main::c#3 )
|
(byte) main::c#2 ← phi( main::@6/(byte) main::c#3 )
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
*((const nomodify byte*) BACKGROUND_COLOR) ← (byte) main::c#2
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) main::c#2
|
||||||
(byte) main::c#1 ← ++ (byte) main::c#2
|
(byte) main::c#1 ← ++ (byte) main::c#2
|
||||||
(byte) main::i1#1 ← ++ (byte) main::i1#3
|
(byte) main::i1#1 ← ++ (byte) main::i1#3
|
||||||
to:main::@6
|
to:main::@6
|
||||||
main::@8: scope:[main] from main::@6
|
main::@8: scope:[main] from main::@6
|
||||||
(byte) col#15 ← phi( main::@6/(byte) col#16 )
|
(byte) col#15 ← phi( main::@6/(byte) col#16 )
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
*((const nomodify byte*) VBLANK) ← (number) 2
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (number) 2
|
||||||
*((const nomodify byte*) BACKGROUND_COLOR) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (number) 0
|
||||||
(byte) main::i2#0 ← (byte) 0
|
(byte) main::i2#0 ← (byte) 0
|
||||||
to:main::@9
|
to:main::@9
|
||||||
main::@9: scope:[main] from main::@10 main::@8
|
main::@9: scope:[main] from main::@10 main::@8
|
||||||
@ -74,7 +77,7 @@ main::@9: scope:[main] from main::@10 main::@8
|
|||||||
main::@10: scope:[main] from main::@9
|
main::@10: scope:[main] from main::@9
|
||||||
(byte) col#14 ← phi( main::@9/(byte) col#11 )
|
(byte) col#14 ← phi( main::@9/(byte) col#11 )
|
||||||
(byte) main::i2#3 ← phi( main::@9/(byte) main::i2#2 )
|
(byte) main::i2#3 ← phi( main::@9/(byte) main::i2#2 )
|
||||||
*((const nomodify byte*) WSYNC) ← (number) 0
|
*((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
(byte) main::i2#1 ← ++ (byte) main::i2#3
|
(byte) main::i2#1 ← ++ (byte) main::i2#3
|
||||||
to:main::@9
|
to:main::@9
|
||||||
main::@return: scope:[main] from main::@1
|
main::@return: scope:[main] from main::@1
|
||||||
@ -97,10 +100,80 @@ SYMBOL TABLE SSA
|
|||||||
(label) @2
|
(label) @2
|
||||||
(label) @begin
|
(label) @begin
|
||||||
(label) @end
|
(label) @end
|
||||||
(const nomodify byte*) BACKGROUND_COLOR = (byte*)(number) 9
|
(byte) ATARI_TIA_READ::CXBLPF
|
||||||
(const nomodify byte*) VBLANK = (byte*)(number) 1
|
(byte) ATARI_TIA_READ::CXM0FB
|
||||||
(const nomodify byte*) VSYNC = (byte*)(number) 0
|
(byte) ATARI_TIA_READ::CXM0P
|
||||||
(const nomodify byte*) WSYNC = (byte*)(number) 2
|
(byte) ATARI_TIA_READ::CXM1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXM1P
|
||||||
|
(byte) ATARI_TIA_READ::CXP0FB
|
||||||
|
(byte) ATARI_TIA_READ::CXP1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXPPMM
|
||||||
|
(byte) ATARI_TIA_READ::INPT0
|
||||||
|
(byte) ATARI_TIA_READ::INPT1
|
||||||
|
(byte) ATARI_TIA_READ::INPT2
|
||||||
|
(byte) ATARI_TIA_READ::INPT3
|
||||||
|
(byte) ATARI_TIA_READ::INPT4
|
||||||
|
(byte) ATARI_TIA_READ::INPT5
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUBK
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP0
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CTRLPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CXCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::ENABL
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM0
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM1
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP0
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMBL
|
||||||
|
(byte) ATARI_TIA_WRITE::HMCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMOVE
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ0
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF0
|
||||||
|
(byte) ATARI_TIA_WRITE::PF1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF2
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP0
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESBL
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::VBLANK
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELBL
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP0
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP1
|
||||||
|
(byte) ATARI_TIA_WRITE::VSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::WSYNC
|
||||||
|
(byte) MOS6532_RIOT::INTIM
|
||||||
|
(byte) MOS6532_RIOT::SWACNT
|
||||||
|
(byte) MOS6532_RIOT::SWBCNT
|
||||||
|
(byte) MOS6532_RIOT::SWCHA
|
||||||
|
(byte) MOS6532_RIOT::SWCHB
|
||||||
|
(byte) MOS6532_RIOT::T1024T
|
||||||
|
(byte) MOS6532_RIOT::TIM1T
|
||||||
|
(byte) MOS6532_RIOT::TIM64T
|
||||||
|
(byte) MOS6532_RIOT::TIM8T
|
||||||
|
(const byte*) MOS6532_RIOT::UNUSED[(number) $f] = { fill( $f, 0) }
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK = (byte) 9
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK = (byte) 1
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC = (byte) 0
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC = (byte) 2
|
||||||
|
(const nomodify struct ATARI_TIA_WRITE*) TIA = (struct ATARI_TIA_WRITE*)(number) 0
|
||||||
(byte) col
|
(byte) col
|
||||||
(byte) col#0
|
(byte) col#0
|
||||||
(byte) col#1
|
(byte) col#1
|
||||||
@ -157,41 +230,38 @@ SYMBOL TABLE SSA
|
|||||||
(byte) main::i2#2
|
(byte) main::i2#2
|
||||||
(byte) main::i2#3
|
(byte) main::i2#3
|
||||||
|
|
||||||
Adding number conversion cast (unumber) 2 in *((const nomodify byte*) WSYNC) ← (number) 2
|
Adding number conversion cast (unumber) 2 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 2
|
||||||
Adding number conversion cast (unumber) 2 in *((const nomodify byte*) VSYNC) ← (number) 2
|
Adding number conversion cast (unumber) 2 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (number) 2
|
||||||
Adding number conversion cast (unumber) 2 in *((const nomodify byte*) WSYNC) ← (number) 2
|
Adding number conversion cast (unumber) 2 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 2
|
||||||
Adding number conversion cast (unumber) 2 in *((const nomodify byte*) WSYNC) ← (number) 2
|
Adding number conversion cast (unumber) 2 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 2
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) WSYNC) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) VSYNC) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (number) 0
|
||||||
Adding number conversion cast (unumber) $25 in (bool~) main::$0 ← (byte) main::i#2 < (number) $25
|
Adding number conversion cast (unumber) $25 in (bool~) main::$0 ← (byte) main::i#2 < (number) $25
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) WSYNC) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) VBLANK) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (number) 0
|
||||||
Adding number conversion cast (unumber) $c0 in (bool~) main::$1 ← (byte) main::i1#2 < (number) $c0
|
Adding number conversion cast (unumber) $c0 in (bool~) main::$1 ← (byte) main::i1#2 < (number) $c0
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) WSYNC) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) WSYNC) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
Adding number conversion cast (unumber) 2 in *((const nomodify byte*) VBLANK) ← (number) 2
|
Adding number conversion cast (unumber) 2 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (number) 2
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) BACKGROUND_COLOR) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (number) 0
|
||||||
Adding number conversion cast (unumber) 7 in (bool~) main::$2 ← (byte) main::i2#2 < (number) 7
|
Adding number conversion cast (unumber) 7 in (bool~) main::$2 ← (byte) main::i2#2 < (number) 7
|
||||||
Adding number conversion cast (unumber) 0 in *((const nomodify byte*) WSYNC) ← (number) 0
|
Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (number) 0
|
||||||
Successful SSA optimization PassNAddNumberTypeConversions
|
Successful SSA optimization PassNAddNumberTypeConversions
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 2
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 2
|
||||||
Inlining cast *((const nomodify byte*) VSYNC) ← (unumber)(number) 2
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (unumber)(number) 2
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 2
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 2
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 2
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 2
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 0
|
||||||
Inlining cast *((const nomodify byte*) VSYNC) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (unumber)(number) 0
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 0
|
||||||
Inlining cast *((const nomodify byte*) VBLANK) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (unumber)(number) 0
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 0
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 0
|
||||||
Inlining cast *((const nomodify byte*) VBLANK) ← (unumber)(number) 2
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (unumber)(number) 2
|
||||||
Inlining cast *((const nomodify byte*) BACKGROUND_COLOR) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (unumber)(number) 0
|
||||||
Inlining cast *((const nomodify byte*) WSYNC) ← (unumber)(number) 0
|
Inlining cast *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (unumber)(number) 0
|
||||||
Successful SSA optimization Pass2InlineCast
|
Successful SSA optimization Pass2InlineCast
|
||||||
Simplifying constant pointer cast (byte*) 0
|
Simplifying constant pointer cast (struct ATARI_TIA_WRITE*) 0
|
||||||
Simplifying constant pointer cast (byte*) 1
|
|
||||||
Simplifying constant pointer cast (byte*) 2
|
|
||||||
Simplifying constant pointer cast (byte*) 9
|
|
||||||
Simplifying constant integer cast 2
|
Simplifying constant integer cast 2
|
||||||
Simplifying constant integer cast 2
|
Simplifying constant integer cast 2
|
||||||
Simplifying constant integer cast 2
|
Simplifying constant integer cast 2
|
||||||
@ -255,6 +325,11 @@ Constant (const byte) main::i2#0 = 0
|
|||||||
Successful SSA optimization Pass2ConstantIdentification
|
Successful SSA optimization Pass2ConstantIdentification
|
||||||
if() condition always true - replacing block destination [4] if((number) 0!=(number) 1) goto main::@2
|
if() condition always true - replacing block destination [4] if((number) 0!=(number) 1) goto main::@2
|
||||||
Successful SSA optimization Pass2ConstantIfs
|
Successful SSA optimization Pass2ConstantIfs
|
||||||
|
Simplifying expression containing zero (byte*)TIA in [6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (byte) 2
|
||||||
|
Simplifying expression containing zero (byte*)TIA in [10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC) ← (byte) 0
|
||||||
|
Successful SSA optimization PassNSimplifyExpressionWithZero
|
||||||
|
Eliminating unused constant (const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VSYNC
|
||||||
|
Successful SSA optimization PassNEliminateUnusedVars
|
||||||
Removing unused block main::@return
|
Removing unused block main::@return
|
||||||
Successful SSA optimization Pass2EliminateUnusedBlocks
|
Successful SSA optimization Pass2EliminateUnusedBlocks
|
||||||
Inlining constant with var siblings (const byte) main::i#0
|
Inlining constant with var siblings (const byte) main::i#0
|
||||||
@ -309,19 +384,19 @@ main::@1: scope:[main] from main main::@9
|
|||||||
[5] (byte) col#12 ← phi( main/(byte) 0 main::@9/(byte) col#1 )
|
[5] (byte) col#12 ← phi( main/(byte) 0 main::@9/(byte) col#1 )
|
||||||
to:main::@2
|
to:main::@2
|
||||||
main::@2: scope:[main] from main::@1
|
main::@2: scope:[main] from main::@1
|
||||||
[6] *((const nomodify byte*) WSYNC) ← (byte) 2
|
[6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2
|
||||||
[7] *((const nomodify byte*) VSYNC) ← (byte) 2
|
[7] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 2
|
||||||
[8] *((const nomodify byte*) WSYNC) ← (byte) 2
|
[8] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2
|
||||||
[9] *((const nomodify byte*) WSYNC) ← (byte) 2
|
[9] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2
|
||||||
[10] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[11] *((const nomodify byte*) VSYNC) ← (byte) 0
|
[11] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 0
|
||||||
to:main::@3
|
to:main::@3
|
||||||
main::@3: scope:[main] from main::@2 main::@4
|
main::@3: scope:[main] from main::@2 main::@4
|
||||||
[12] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 )
|
[12] (byte) main::i#2 ← phi( main::@2/(byte) 0 main::@4/(byte) main::i#1 )
|
||||||
[13] if((byte) main::i#2<(byte) $25) goto main::@4
|
[13] if((byte) main::i#2<(byte) $25) goto main::@4
|
||||||
to:main::@5
|
to:main::@5
|
||||||
main::@5: scope:[main] from main::@3
|
main::@5: scope:[main] from main::@3
|
||||||
[14] *((const nomodify byte*) VBLANK) ← (byte) 0
|
[14] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 0
|
||||||
[15] (byte) main::c#0 ← (byte) col#12
|
[15] (byte) main::c#0 ← (byte) col#12
|
||||||
[16] (byte) col#1 ← ++ (byte) col#12
|
[16] (byte) col#1 ← ++ (byte) col#12
|
||||||
to:main::@6
|
to:main::@6
|
||||||
@ -331,31 +406,99 @@ main::@6: scope:[main] from main::@5 main::@7
|
|||||||
[18] if((byte) main::i1#2<(byte) $c0) goto main::@7
|
[18] if((byte) main::i1#2<(byte) $c0) goto main::@7
|
||||||
to:main::@8
|
to:main::@8
|
||||||
main::@8: scope:[main] from main::@6
|
main::@8: scope:[main] from main::@6
|
||||||
[19] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[19] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[20] *((const nomodify byte*) VBLANK) ← (byte) 2
|
[20] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 2
|
||||||
[21] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) 0
|
[21] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) 0
|
||||||
to:main::@9
|
to:main::@9
|
||||||
main::@9: scope:[main] from main::@10 main::@8
|
main::@9: scope:[main] from main::@10 main::@8
|
||||||
[22] (byte) main::i2#2 ← phi( main::@10/(byte) main::i2#1 main::@8/(byte) 0 )
|
[22] (byte) main::i2#2 ← phi( main::@10/(byte) main::i2#1 main::@8/(byte) 0 )
|
||||||
[23] if((byte) main::i2#2<(byte) 7) goto main::@10
|
[23] if((byte) main::i2#2<(byte) 7) goto main::@10
|
||||||
to:main::@1
|
to:main::@1
|
||||||
main::@10: scope:[main] from main::@9
|
main::@10: scope:[main] from main::@9
|
||||||
[24] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[24] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[25] (byte) main::i2#1 ← ++ (byte) main::i2#2
|
[25] (byte) main::i2#1 ← ++ (byte) main::i2#2
|
||||||
to:main::@9
|
to:main::@9
|
||||||
main::@7: scope:[main] from main::@6
|
main::@7: scope:[main] from main::@6
|
||||||
[26] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[26] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[27] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) main::c#2
|
[27] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) main::c#2
|
||||||
[28] (byte) main::c#1 ← ++ (byte) main::c#2
|
[28] (byte) main::c#1 ← ++ (byte) main::c#2
|
||||||
[29] (byte) main::i1#1 ← ++ (byte) main::i1#2
|
[29] (byte) main::i1#1 ← ++ (byte) main::i1#2
|
||||||
to:main::@6
|
to:main::@6
|
||||||
main::@4: scope:[main] from main::@3
|
main::@4: scope:[main] from main::@3
|
||||||
[30] *((const nomodify byte*) WSYNC) ← (byte) 0
|
[30] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0
|
||||||
[31] (byte) main::i#1 ← ++ (byte) main::i#2
|
[31] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||||
to:main::@3
|
to:main::@3
|
||||||
|
|
||||||
|
|
||||||
VARIABLE REGISTER WEIGHTS
|
VARIABLE REGISTER WEIGHTS
|
||||||
|
(byte) ATARI_TIA_READ::CXBLPF
|
||||||
|
(byte) ATARI_TIA_READ::CXM0FB
|
||||||
|
(byte) ATARI_TIA_READ::CXM0P
|
||||||
|
(byte) ATARI_TIA_READ::CXM1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXM1P
|
||||||
|
(byte) ATARI_TIA_READ::CXP0FB
|
||||||
|
(byte) ATARI_TIA_READ::CXP1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXPPMM
|
||||||
|
(byte) ATARI_TIA_READ::INPT0
|
||||||
|
(byte) ATARI_TIA_READ::INPT1
|
||||||
|
(byte) ATARI_TIA_READ::INPT2
|
||||||
|
(byte) ATARI_TIA_READ::INPT3
|
||||||
|
(byte) ATARI_TIA_READ::INPT4
|
||||||
|
(byte) ATARI_TIA_READ::INPT5
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUBK
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP0
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CTRLPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CXCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::ENABL
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM0
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM1
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP0
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMBL
|
||||||
|
(byte) ATARI_TIA_WRITE::HMCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMOVE
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ0
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF0
|
||||||
|
(byte) ATARI_TIA_WRITE::PF1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF2
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP0
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESBL
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::VBLANK
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELBL
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP0
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP1
|
||||||
|
(byte) ATARI_TIA_WRITE::VSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::WSYNC
|
||||||
|
(byte) MOS6532_RIOT::INTIM
|
||||||
|
(byte) MOS6532_RIOT::SWACNT
|
||||||
|
(byte) MOS6532_RIOT::SWBCNT
|
||||||
|
(byte) MOS6532_RIOT::SWCHA
|
||||||
|
(byte) MOS6532_RIOT::SWCHB
|
||||||
|
(byte) MOS6532_RIOT::T1024T
|
||||||
|
(byte) MOS6532_RIOT::TIM1T
|
||||||
|
(byte) MOS6532_RIOT::TIM64T
|
||||||
|
(byte) MOS6532_RIOT::TIM8T
|
||||||
(byte) col
|
(byte) col
|
||||||
(byte) col#1 78.71428571428571
|
(byte) col#1 78.71428571428571
|
||||||
(byte) col#12 92.53846153846155
|
(byte) col#12 92.53846153846155
|
||||||
@ -396,6 +539,7 @@ INITIAL ASM
|
|||||||
Target platform is atari2600 / MOS6502X
|
Target platform is atari2600 / MOS6502X
|
||||||
// File Comments
|
// File Comments
|
||||||
// Minimal Atari 2600 VCS Program
|
// Minimal Atari 2600 VCS Program
|
||||||
|
// Source: https://atariage.com/forums/blogs/entry/11109-step-1-generate-a-stable-display/
|
||||||
// Upstart
|
// Upstart
|
||||||
// Atari 2600 VCS 4K ROM
|
// Atari 2600 VCS 4K ROM
|
||||||
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
||||||
@ -409,10 +553,11 @@ Target platform is atari2600 / MOS6502X
|
|||||||
.segment Code
|
.segment Code
|
||||||
|
|
||||||
// Global Constants & labels
|
// Global Constants & labels
|
||||||
.label VSYNC = 0
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC = 2
|
||||||
.label VBLANK = 1
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK = 1
|
||||||
.label WSYNC = 2
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK = 9
|
||||||
.label BACKGROUND_COLOR = 9
|
// Atari TIA write registers
|
||||||
|
.label TIA = 0
|
||||||
// @begin
|
// @begin
|
||||||
__bbegin:
|
__bbegin:
|
||||||
// [1] phi from @begin to @1 [phi:@begin->@1]
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -447,33 +592,33 @@ main: {
|
|||||||
jmp __b2
|
jmp __b2
|
||||||
// main::@2
|
// main::@2
|
||||||
__b2:
|
__b2:
|
||||||
// [6] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Vertical Sync
|
// Vertical Sync
|
||||||
// here we generate the signal that tells the TV to move the beam to the top of
|
// here we generate the signal that tells the TV to move the beam to the top of
|
||||||
// the screen so we can start the next frame of video.
|
// the screen so we can start the next frame of video.
|
||||||
// The Sync Signal must be on for 3 scanlines.
|
// The Sync Signal must be on for 3 scanlines.
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [7] *((const nomodify byte*) VSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [7] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
lda #2
|
lda #2
|
||||||
sta VSYNC
|
sta TIA
|
||||||
// [8] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [8] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Accumulator D1=1, turns on Vertical Sync signal
|
// Accumulator D1=1, turns on Vertical Sync signal
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [9] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [9] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [10] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// wait until end of 2nd scanline of VSYNC
|
// wait until end of 2nd scanline of VSYNC
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [11] *((const nomodify byte*) VSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [11] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// wait until end of 3rd scanline of VSYNC
|
// wait until end of 3rd scanline of VSYNC
|
||||||
lda #0
|
lda #0
|
||||||
sta VSYNC
|
sta TIA
|
||||||
// [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
|
// [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
|
||||||
__b3_from___b2:
|
__b3_from___b2:
|
||||||
// [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1
|
// [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1
|
||||||
@ -491,12 +636,12 @@ main: {
|
|||||||
jmp __b5
|
jmp __b5
|
||||||
// main::@5
|
// main::@5
|
||||||
__b5:
|
__b5:
|
||||||
// [14] *((const nomodify byte*) VBLANK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [14] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// Screen - display logic
|
// Screen - display logic
|
||||||
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
||||||
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
||||||
lda #0
|
lda #0
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// [15] (byte) main::c#0 ← (byte) col#12 -- vbuz1=vbum2
|
// [15] (byte) main::c#0 ← (byte) col#12 -- vbuz1=vbum2
|
||||||
// D1=1, turns off Vertical Blank signal (image output on)
|
// D1=1, turns off Vertical Blank signal (image output on)
|
||||||
lda col
|
lda col
|
||||||
@ -519,19 +664,19 @@ main: {
|
|||||||
jmp __b8
|
jmp __b8
|
||||||
// main::@8
|
// main::@8
|
||||||
__b8:
|
__b8:
|
||||||
// [19] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [19] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// Overscan - game logic
|
// Overscan - game logic
|
||||||
// Since we don't have any yet, just delay
|
// Since we don't have any yet, just delay
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [20] *((const nomodify byte*) VBLANK) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [20] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
lda #2
|
lda #2
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// [21] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [21] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// // D1=1 turns image output off
|
// // D1=1 turns image output off
|
||||||
lda #0
|
lda #0
|
||||||
sta BACKGROUND_COLOR
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
||||||
__b9_from___b8:
|
__b9_from___b8:
|
||||||
// [22] phi (byte) main::i2#2 = (byte) 0 [phi:main::@8->main::@9#0] -- vbuz1=vbuc1
|
// [22] phi (byte) main::i2#2 = (byte) 0 [phi:main::@8->main::@9#0] -- vbuz1=vbuc1
|
||||||
@ -550,9 +695,9 @@ main: {
|
|||||||
jmp __b1
|
jmp __b1
|
||||||
// main::@10
|
// main::@10
|
||||||
__b10:
|
__b10:
|
||||||
// [24] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [24] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [25] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuz1=_inc_vbuz1
|
// [25] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuz1=_inc_vbuz1
|
||||||
inc.z i2
|
inc.z i2
|
||||||
// [22] phi from main::@10 to main::@9 [phi:main::@10->main::@9]
|
// [22] phi from main::@10 to main::@9 [phi:main::@10->main::@9]
|
||||||
@ -561,13 +706,13 @@ main: {
|
|||||||
jmp __b9
|
jmp __b9
|
||||||
// main::@7
|
// main::@7
|
||||||
__b7:
|
__b7:
|
||||||
// [26] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [26] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [27] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) main::c#2 -- _deref_pbuc1=vbuz1
|
// [27] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) main::c#2 -- _deref_pbuc1=vbuz1
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
lda.z c
|
lda.z c
|
||||||
sta BACKGROUND_COLOR
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
// [28] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1
|
// [28] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuz1=_inc_vbuz1
|
||||||
inc.z c
|
inc.z c
|
||||||
// [29] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1
|
// [29] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1
|
||||||
@ -579,9 +724,9 @@ main: {
|
|||||||
jmp __b6
|
jmp __b6
|
||||||
// main::@4
|
// main::@4
|
||||||
__b4:
|
__b4:
|
||||||
// [30] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [30] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
// [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||||
inc.z i
|
inc.z i
|
||||||
// [12] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
|
// [12] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
|
||||||
@ -594,37 +739,37 @@ main: {
|
|||||||
col: .byte 0
|
col: .byte 0
|
||||||
|
|
||||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||||
Statement [6] *((const nomodify byte*) WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Removing always clobbered register reg byte a as potential for mem[1] [ col#12 col#1 ]
|
Removing always clobbered register reg byte a as potential for mem[1] [ col#12 col#1 ]
|
||||||
Statement [7] *((const nomodify byte*) VSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [7] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [8] *((const nomodify byte*) WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [8] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [9] *((const nomodify byte*) WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [9] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [10] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [11] *((const nomodify byte*) VSYNC) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [11] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [14] *((const nomodify byte*) VBLANK) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [14] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [19] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
Statement [19] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
||||||
Statement [20] *((const nomodify byte*) VBLANK) ← (byte) 2 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
Statement [20] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 2 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
||||||
Statement [21] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
Statement [21] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
||||||
Statement [24] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#1 main::i2#2 ] ( main:2 [ col#1 main::i2#2 ] { } ) always clobbers reg byte a
|
Statement [24] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#1 main::i2#2 ] ( main:2 [ col#1 main::i2#2 ] { } ) always clobbers reg byte a
|
||||||
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::i2#2 main::i2#1 ]
|
Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::i2#2 main::i2#1 ]
|
||||||
Statement [26] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#1 main::i1#2 main::c#2 ] ( main:2 [ col#1 main::i1#2 main::c#2 ] { } ) always clobbers reg byte a
|
Statement [26] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#1 main::i1#2 main::c#2 ] ( main:2 [ col#1 main::i1#2 main::c#2 ] { } ) always clobbers reg byte a
|
||||||
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i1#2 main::i1#1 ]
|
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i1#2 main::i1#1 ]
|
||||||
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::c#2 main::c#0 main::c#1 ]
|
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::c#2 main::c#0 main::c#1 ]
|
||||||
Statement [30] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#12 main::i#2 ] ( main:2 [ col#12 main::i#2 ] { } ) always clobbers reg byte a
|
Statement [30] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#12 main::i#2 ] ( main:2 [ col#12 main::i#2 ] { } ) always clobbers reg byte a
|
||||||
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
|
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
|
||||||
Statement [6] *((const nomodify byte*) WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [7] *((const nomodify byte*) VSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [7] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [8] *((const nomodify byte*) WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [8] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [9] *((const nomodify byte*) WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [9] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [10] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [11] *((const nomodify byte*) VSYNC) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [11] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [14] *((const nomodify byte*) VBLANK) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
Statement [14] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 0 [ col#12 ] ( main:2 [ col#12 ] { } ) always clobbers reg byte a
|
||||||
Statement [19] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
Statement [19] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
||||||
Statement [20] *((const nomodify byte*) VBLANK) ← (byte) 2 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
Statement [20] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 2 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
||||||
Statement [21] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
Statement [21] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] { } ) always clobbers reg byte a
|
||||||
Statement [24] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#1 main::i2#2 ] ( main:2 [ col#1 main::i2#2 ] { } ) always clobbers reg byte a
|
Statement [24] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#1 main::i2#2 ] ( main:2 [ col#1 main::i2#2 ] { } ) always clobbers reg byte a
|
||||||
Statement [26] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#1 main::i1#2 main::c#2 ] ( main:2 [ col#1 main::i1#2 main::c#2 ] { } ) always clobbers reg byte a
|
Statement [26] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#1 main::i1#2 main::c#2 ] ( main:2 [ col#1 main::i1#2 main::c#2 ] { } ) always clobbers reg byte a
|
||||||
Statement [30] *((const nomodify byte*) WSYNC) ← (byte) 0 [ col#12 main::i#2 ] ( main:2 [ col#12 main::i#2 ] { } ) always clobbers reg byte a
|
Statement [30] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 [ col#12 main::i#2 ] ( main:2 [ col#12 main::i#2 ] { } ) always clobbers reg byte a
|
||||||
Potential registers mem[1] [ col#12 col#1 ] : mem[1] , reg byte x , reg byte y ,
|
Potential registers mem[1] [ col#12 col#1 ] : mem[1] , reg byte x , reg byte y ,
|
||||||
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
|
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
|
||||||
Potential registers zp[1]:3 [ main::i1#2 main::i1#1 ] : zp[1]:3 , reg byte x , reg byte y ,
|
Potential registers zp[1]:3 [ main::i1#2 main::i1#1 ] : zp[1]:3 , reg byte x , reg byte y ,
|
||||||
@ -634,15 +779,22 @@ Potential registers zp[1]:5 [ main::i2#2 main::i2#1 ] : zp[1]:5 , reg byte x , r
|
|||||||
REGISTER UPLIFT SCOPES
|
REGISTER UPLIFT SCOPES
|
||||||
Uplift Scope [main] 3,003: zp[1]:2 [ main::i#2 main::i#1 ] 3,003: zp[1]:5 [ main::i2#2 main::i2#1 ] 2,602.6: zp[1]:3 [ main::i1#2 main::i1#1 ] 1,878: zp[1]:4 [ main::c#2 main::c#0 main::c#1 ]
|
Uplift Scope [main] 3,003: zp[1]:2 [ main::i#2 main::i#1 ] 3,003: zp[1]:5 [ main::i2#2 main::i2#1 ] 2,602.6: zp[1]:3 [ main::i1#2 main::i1#1 ] 1,878: zp[1]:4 [ main::c#2 main::c#0 main::c#1 ]
|
||||||
Uplift Scope [] 171.25: mem[1] [ col#12 col#1 ]
|
Uplift Scope [] 171.25: mem[1] [ col#12 col#1 ]
|
||||||
|
Uplift Scope [ATARI_TIA_WRITE]
|
||||||
|
Uplift Scope [ATARI_TIA_READ]
|
||||||
|
Uplift Scope [MOS6532_RIOT]
|
||||||
|
|
||||||
Uplifting [main] best 8212 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i2#2 main::i2#1 ] reg byte y [ main::i1#2 main::i1#1 ] reg byte x [ main::c#2 main::c#0 main::c#1 ]
|
Uplifting [main] best 8212 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i2#2 main::i2#1 ] reg byte y [ main::i1#2 main::i1#1 ] reg byte x [ main::c#2 main::c#0 main::c#1 ]
|
||||||
Uplifting [] best 8212 combination mem[1] [ col#12 col#1 ]
|
Uplifting [] best 8212 combination mem[1] [ col#12 col#1 ]
|
||||||
|
Uplifting [ATARI_TIA_WRITE] best 8212 combination
|
||||||
|
Uplifting [ATARI_TIA_READ] best 8212 combination
|
||||||
|
Uplifting [MOS6532_RIOT] best 8212 combination
|
||||||
Attempting to uplift remaining variables inmem[1] [ col#12 col#1 ]
|
Attempting to uplift remaining variables inmem[1] [ col#12 col#1 ]
|
||||||
Uplifting [] best 8212 combination mem[1] [ col#12 col#1 ]
|
Uplifting [] best 8212 combination mem[1] [ col#12 col#1 ]
|
||||||
|
|
||||||
ASSEMBLER BEFORE OPTIMIZATION
|
ASSEMBLER BEFORE OPTIMIZATION
|
||||||
// File Comments
|
// File Comments
|
||||||
// Minimal Atari 2600 VCS Program
|
// Minimal Atari 2600 VCS Program
|
||||||
|
// Source: https://atariage.com/forums/blogs/entry/11109-step-1-generate-a-stable-display/
|
||||||
// Upstart
|
// Upstart
|
||||||
// Atari 2600 VCS 4K ROM
|
// Atari 2600 VCS 4K ROM
|
||||||
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
||||||
@ -656,10 +808,11 @@ ASSEMBLER BEFORE OPTIMIZATION
|
|||||||
.segment Code
|
.segment Code
|
||||||
|
|
||||||
// Global Constants & labels
|
// Global Constants & labels
|
||||||
.label VSYNC = 0
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC = 2
|
||||||
.label VBLANK = 1
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK = 1
|
||||||
.label WSYNC = 2
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK = 9
|
||||||
.label BACKGROUND_COLOR = 9
|
// Atari TIA write registers
|
||||||
|
.label TIA = 0
|
||||||
// @begin
|
// @begin
|
||||||
__bbegin:
|
__bbegin:
|
||||||
// [1] phi from @begin to @1 [phi:@begin->@1]
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
@ -690,33 +843,33 @@ main: {
|
|||||||
jmp __b2
|
jmp __b2
|
||||||
// main::@2
|
// main::@2
|
||||||
__b2:
|
__b2:
|
||||||
// [6] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Vertical Sync
|
// Vertical Sync
|
||||||
// here we generate the signal that tells the TV to move the beam to the top of
|
// here we generate the signal that tells the TV to move the beam to the top of
|
||||||
// the screen so we can start the next frame of video.
|
// the screen so we can start the next frame of video.
|
||||||
// The Sync Signal must be on for 3 scanlines.
|
// The Sync Signal must be on for 3 scanlines.
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [7] *((const nomodify byte*) VSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [7] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
lda #2
|
lda #2
|
||||||
sta VSYNC
|
sta TIA
|
||||||
// [8] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [8] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Accumulator D1=1, turns on Vertical Sync signal
|
// Accumulator D1=1, turns on Vertical Sync signal
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [9] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [9] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [10] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// wait until end of 2nd scanline of VSYNC
|
// wait until end of 2nd scanline of VSYNC
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [11] *((const nomodify byte*) VSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [11] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// wait until end of 3rd scanline of VSYNC
|
// wait until end of 3rd scanline of VSYNC
|
||||||
lda #0
|
lda #0
|
||||||
sta VSYNC
|
sta TIA
|
||||||
// [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
|
// [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
|
||||||
__b3_from___b2:
|
__b3_from___b2:
|
||||||
// [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuxx=vbuc1
|
// [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuxx=vbuc1
|
||||||
@ -732,12 +885,12 @@ main: {
|
|||||||
jmp __b5
|
jmp __b5
|
||||||
// main::@5
|
// main::@5
|
||||||
__b5:
|
__b5:
|
||||||
// [14] *((const nomodify byte*) VBLANK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [14] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// Screen - display logic
|
// Screen - display logic
|
||||||
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
||||||
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
||||||
lda #0
|
lda #0
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// [15] (byte) main::c#0 ← (byte) col#12 -- vbuxx=vbum1
|
// [15] (byte) main::c#0 ← (byte) col#12 -- vbuxx=vbum1
|
||||||
// D1=1, turns off Vertical Blank signal (image output on)
|
// D1=1, turns off Vertical Blank signal (image output on)
|
||||||
ldx col
|
ldx col
|
||||||
@ -757,19 +910,19 @@ main: {
|
|||||||
jmp __b8
|
jmp __b8
|
||||||
// main::@8
|
// main::@8
|
||||||
__b8:
|
__b8:
|
||||||
// [19] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [19] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// Overscan - game logic
|
// Overscan - game logic
|
||||||
// Since we don't have any yet, just delay
|
// Since we don't have any yet, just delay
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [20] *((const nomodify byte*) VBLANK) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [20] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
lda #2
|
lda #2
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// [21] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [21] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// // D1=1 turns image output off
|
// // D1=1 turns image output off
|
||||||
lda #0
|
lda #0
|
||||||
sta BACKGROUND_COLOR
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
||||||
__b9_from___b8:
|
__b9_from___b8:
|
||||||
// [22] phi (byte) main::i2#2 = (byte) 0 [phi:main::@8->main::@9#0] -- vbuxx=vbuc1
|
// [22] phi (byte) main::i2#2 = (byte) 0 [phi:main::@8->main::@9#0] -- vbuxx=vbuc1
|
||||||
@ -786,9 +939,9 @@ main: {
|
|||||||
jmp __b1
|
jmp __b1
|
||||||
// main::@10
|
// main::@10
|
||||||
__b10:
|
__b10:
|
||||||
// [24] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [24] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [25] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuxx=_inc_vbuxx
|
// [25] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuxx=_inc_vbuxx
|
||||||
inx
|
inx
|
||||||
// [22] phi from main::@10 to main::@9 [phi:main::@10->main::@9]
|
// [22] phi from main::@10 to main::@9 [phi:main::@10->main::@9]
|
||||||
@ -797,12 +950,12 @@ main: {
|
|||||||
jmp __b9
|
jmp __b9
|
||||||
// main::@7
|
// main::@7
|
||||||
__b7:
|
__b7:
|
||||||
// [26] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [26] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [27] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx
|
// [27] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
stx BACKGROUND_COLOR
|
stx TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
// [28] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuxx=_inc_vbuxx
|
// [28] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuxx=_inc_vbuxx
|
||||||
inx
|
inx
|
||||||
// [29] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuyy=_inc_vbuyy
|
// [29] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuyy=_inc_vbuyy
|
||||||
@ -814,9 +967,9 @@ main: {
|
|||||||
jmp __b6
|
jmp __b6
|
||||||
// main::@4
|
// main::@4
|
||||||
__b4:
|
__b4:
|
||||||
// [30] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [30] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
// [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||||
inx
|
inx
|
||||||
// [12] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
|
// [12] phi from main::@4 to main::@3 [phi:main::@4->main::@3]
|
||||||
@ -874,10 +1027,79 @@ FINAL SYMBOL TABLE
|
|||||||
(label) @1
|
(label) @1
|
||||||
(label) @begin
|
(label) @begin
|
||||||
(label) @end
|
(label) @end
|
||||||
(const nomodify byte*) BACKGROUND_COLOR = (byte*) 9
|
(byte) ATARI_TIA_READ::CXBLPF
|
||||||
(const nomodify byte*) VBLANK = (byte*) 1
|
(byte) ATARI_TIA_READ::CXM0FB
|
||||||
(const nomodify byte*) VSYNC = (byte*) 0
|
(byte) ATARI_TIA_READ::CXM0P
|
||||||
(const nomodify byte*) WSYNC = (byte*) 2
|
(byte) ATARI_TIA_READ::CXM1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXM1P
|
||||||
|
(byte) ATARI_TIA_READ::CXP0FB
|
||||||
|
(byte) ATARI_TIA_READ::CXP1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXPPMM
|
||||||
|
(byte) ATARI_TIA_READ::INPT0
|
||||||
|
(byte) ATARI_TIA_READ::INPT1
|
||||||
|
(byte) ATARI_TIA_READ::INPT2
|
||||||
|
(byte) ATARI_TIA_READ::INPT3
|
||||||
|
(byte) ATARI_TIA_READ::INPT4
|
||||||
|
(byte) ATARI_TIA_READ::INPT5
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUBK
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP0
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CTRLPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CXCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::ENABL
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM0
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM1
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP0
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMBL
|
||||||
|
(byte) ATARI_TIA_WRITE::HMCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMOVE
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ0
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF0
|
||||||
|
(byte) ATARI_TIA_WRITE::PF1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF2
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP0
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESBL
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::VBLANK
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELBL
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP0
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP1
|
||||||
|
(byte) ATARI_TIA_WRITE::VSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::WSYNC
|
||||||
|
(byte) MOS6532_RIOT::INTIM
|
||||||
|
(byte) MOS6532_RIOT::SWACNT
|
||||||
|
(byte) MOS6532_RIOT::SWBCNT
|
||||||
|
(byte) MOS6532_RIOT::SWCHA
|
||||||
|
(byte) MOS6532_RIOT::SWCHB
|
||||||
|
(byte) MOS6532_RIOT::T1024T
|
||||||
|
(byte) MOS6532_RIOT::TIM1T
|
||||||
|
(byte) MOS6532_RIOT::TIM64T
|
||||||
|
(byte) MOS6532_RIOT::TIM8T
|
||||||
|
(const byte*) MOS6532_RIOT::UNUSED[(number) $f] = { fill( $f, 0) }
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK = (byte) 9
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK = (byte) 1
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC = (byte) 2
|
||||||
|
(const nomodify struct ATARI_TIA_WRITE*) TIA = (struct ATARI_TIA_WRITE*) 0
|
||||||
(byte) col
|
(byte) col
|
||||||
(byte) col#1 col mem[1] 78.71428571428571
|
(byte) col#1 col mem[1] 78.71428571428571
|
||||||
(byte) col#12 col mem[1] 92.53846153846155
|
(byte) col#12 col mem[1] 92.53846153846155
|
||||||
@ -918,6 +1140,7 @@ Score: 6560
|
|||||||
|
|
||||||
// File Comments
|
// File Comments
|
||||||
// Minimal Atari 2600 VCS Program
|
// Minimal Atari 2600 VCS Program
|
||||||
|
// Source: https://atariage.com/forums/blogs/entry/11109-step-1-generate-a-stable-display/
|
||||||
// Upstart
|
// Upstart
|
||||||
// Atari 2600 VCS 4K ROM
|
// Atari 2600 VCS 4K ROM
|
||||||
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
.file [name="atari2600-min.prg", type="bin", segments="Code, Vectors"]
|
||||||
@ -931,10 +1154,11 @@ Score: 6560
|
|||||||
.segment Code
|
.segment Code
|
||||||
|
|
||||||
// Global Constants & labels
|
// Global Constants & labels
|
||||||
.label VSYNC = 0
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC = 2
|
||||||
.label VBLANK = 1
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK = 1
|
||||||
.label WSYNC = 2
|
.const OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK = 9
|
||||||
.label BACKGROUND_COLOR = 9
|
// Atari TIA write registers
|
||||||
|
.label TIA = 0
|
||||||
// @begin
|
// @begin
|
||||||
// [1] phi from @begin to @1 [phi:@begin->@1]
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
||||||
// @1
|
// @1
|
||||||
@ -952,34 +1176,34 @@ main: {
|
|||||||
// main::@1
|
// main::@1
|
||||||
// main::@2
|
// main::@2
|
||||||
__b2:
|
__b2:
|
||||||
// *WSYNC = 2
|
// TIA->WSYNC = 2
|
||||||
// [6] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [6] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Vertical Sync
|
// Vertical Sync
|
||||||
// here we generate the signal that tells the TV to move the beam to the top of
|
// here we generate the signal that tells the TV to move the beam to the top of
|
||||||
// the screen so we can start the next frame of video.
|
// the screen so we can start the next frame of video.
|
||||||
// The Sync Signal must be on for 3 scanlines.
|
// The Sync Signal must be on for 3 scanlines.
|
||||||
lda #2
|
lda #2
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *VSYNC = 2
|
// TIA->VSYNC = 2
|
||||||
// [7] *((const nomodify byte*) VSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [7] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
sta VSYNC
|
sta TIA
|
||||||
// *WSYNC = 2
|
// TIA->WSYNC = 2
|
||||||
// [8] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [8] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Accumulator D1=1, turns on Vertical Sync signal
|
// Accumulator D1=1, turns on Vertical Sync signal
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// [9] *((const nomodify byte*) WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [9] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
// Wait for Sync - halts CPU until end of 1st scanline of VSYNC
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
// [10] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [10] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// wait until end of 2nd scanline of VSYNC
|
// wait until end of 2nd scanline of VSYNC
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *VSYNC = 0
|
// TIA->VSYNC = 0
|
||||||
// [11] *((const nomodify byte*) VSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [11] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// wait until end of 3rd scanline of VSYNC
|
// wait until end of 3rd scanline of VSYNC
|
||||||
sta VSYNC
|
sta TIA
|
||||||
// [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
|
// [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
|
||||||
// [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuxx=vbuc1
|
// [12] phi (byte) main::i#2 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuxx=vbuc1
|
||||||
tax
|
tax
|
||||||
@ -992,13 +1216,13 @@ main: {
|
|||||||
cpx #$25
|
cpx #$25
|
||||||
bcc __b4
|
bcc __b4
|
||||||
// main::@5
|
// main::@5
|
||||||
// *VBLANK = 0
|
// TIA->VBLANK = 0
|
||||||
// [14] *((const nomodify byte*) VBLANK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [14] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// Screen - display logic
|
// Screen - display logic
|
||||||
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
// Update the registers in TIA (the video chip) in order to generate what the player sees.
|
||||||
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
// For now we're just going to output 192 colored scanlines lines so we have something to see.
|
||||||
lda #0
|
lda #0
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// c = col++
|
// c = col++
|
||||||
// [15] (byte) main::c#0 ← (byte) col#12 -- vbuxx=vbum1
|
// [15] (byte) main::c#0 ← (byte) col#12 -- vbuxx=vbum1
|
||||||
// D1=1, turns off Vertical Blank signal (image output on)
|
// D1=1, turns off Vertical Blank signal (image output on)
|
||||||
@ -1016,22 +1240,22 @@ main: {
|
|||||||
cpy #$c0
|
cpy #$c0
|
||||||
bcc __b7
|
bcc __b7
|
||||||
// main::@8
|
// main::@8
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
// [19] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [19] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// Overscan - game logic
|
// Overscan - game logic
|
||||||
// Since we don't have any yet, just delay
|
// Since we don't have any yet, just delay
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *VBLANK = 2
|
// TIA->VBLANK = 2
|
||||||
// [20] *((const nomodify byte*) VBLANK) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
// [20] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK) ← (byte) 2 -- _deref_pbuc1=vbuc2
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
lda #2
|
lda #2
|
||||||
sta VBLANK
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK
|
||||||
// *BACKGROUND_COLOR = 0
|
// TIA->COLUBK = 0
|
||||||
// [21] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [21] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
// // D1=1 turns image output off
|
// // D1=1 turns image output off
|
||||||
lda #0
|
lda #0
|
||||||
sta BACKGROUND_COLOR
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
// [22] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
|
||||||
// [22] phi (byte) main::i2#2 = (byte) 0 [phi:main::@8->main::@9#0] -- vbuxx=vbuc1
|
// [22] phi (byte) main::i2#2 = (byte) 0 [phi:main::@8->main::@9#0] -- vbuxx=vbuc1
|
||||||
tax
|
tax
|
||||||
@ -1046,10 +1270,10 @@ main: {
|
|||||||
jmp __b2
|
jmp __b2
|
||||||
// main::@10
|
// main::@10
|
||||||
__b10:
|
__b10:
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
// [24] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [24] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// for(char i=0;i<07;i++)
|
// for(char i=0;i<07;i++)
|
||||||
// [25] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuxx=_inc_vbuxx
|
// [25] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuxx=_inc_vbuxx
|
||||||
inx
|
inx
|
||||||
@ -1058,15 +1282,15 @@ main: {
|
|||||||
jmp __b9
|
jmp __b9
|
||||||
// main::@7
|
// main::@7
|
||||||
__b7:
|
__b7:
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
// [26] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [26] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// *BACKGROUND_COLOR = c++
|
// TIA->COLUBK = c++
|
||||||
// [27] *((const nomodify byte*) BACKGROUND_COLOR) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx
|
// [27] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK) ← (byte) main::c#2 -- _deref_pbuc1=vbuxx
|
||||||
// Wait for SYNC (halts CPU until end of scanline)
|
// Wait for SYNC (halts CPU until end of scanline)
|
||||||
stx BACKGROUND_COLOR
|
stx TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK
|
||||||
// *BACKGROUND_COLOR = c++;
|
// TIA->COLUBK = c++;
|
||||||
// [28] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuxx=_inc_vbuxx
|
// [28] (byte) main::c#1 ← ++ (byte) main::c#2 -- vbuxx=_inc_vbuxx
|
||||||
inx
|
inx
|
||||||
// for(char i=0;i<192;i++)
|
// for(char i=0;i<192;i++)
|
||||||
@ -1078,10 +1302,10 @@ main: {
|
|||||||
jmp __b6
|
jmp __b6
|
||||||
// main::@4
|
// main::@4
|
||||||
__b4:
|
__b4:
|
||||||
// *WSYNC = 0
|
// TIA->WSYNC = 0
|
||||||
// [30] *((const nomodify byte*) WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
// [30] *((byte*)(const nomodify struct ATARI_TIA_WRITE*) TIA+(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC) ← (byte) 0 -- _deref_pbuc1=vbuc2
|
||||||
lda #0
|
lda #0
|
||||||
sta WSYNC
|
sta TIA+OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC
|
||||||
// for(char i=0;i<37;i++)
|
// for(char i=0;i<37;i++)
|
||||||
// [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
// [31] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
|
||||||
inx
|
inx
|
||||||
|
@ -1,10 +1,79 @@
|
|||||||
(label) @1
|
(label) @1
|
||||||
(label) @begin
|
(label) @begin
|
||||||
(label) @end
|
(label) @end
|
||||||
(const nomodify byte*) BACKGROUND_COLOR = (byte*) 9
|
(byte) ATARI_TIA_READ::CXBLPF
|
||||||
(const nomodify byte*) VBLANK = (byte*) 1
|
(byte) ATARI_TIA_READ::CXM0FB
|
||||||
(const nomodify byte*) VSYNC = (byte*) 0
|
(byte) ATARI_TIA_READ::CXM0P
|
||||||
(const nomodify byte*) WSYNC = (byte*) 2
|
(byte) ATARI_TIA_READ::CXM1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXM1P
|
||||||
|
(byte) ATARI_TIA_READ::CXP0FB
|
||||||
|
(byte) ATARI_TIA_READ::CXP1FB
|
||||||
|
(byte) ATARI_TIA_READ::CXPPMM
|
||||||
|
(byte) ATARI_TIA_READ::INPT0
|
||||||
|
(byte) ATARI_TIA_READ::INPT1
|
||||||
|
(byte) ATARI_TIA_READ::INPT2
|
||||||
|
(byte) ATARI_TIA_READ::INPT3
|
||||||
|
(byte) ATARI_TIA_READ::INPT4
|
||||||
|
(byte) ATARI_TIA_READ::INPT5
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDC1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDF1
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV0
|
||||||
|
(byte) ATARI_TIA_WRITE::AUDV1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUBK
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP0
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUP1
|
||||||
|
(byte) ATARI_TIA_WRITE::COLUPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CTRLPF
|
||||||
|
(byte) ATARI_TIA_WRITE::CXCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::ENABL
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM0
|
||||||
|
(byte) ATARI_TIA_WRITE::ENAM1
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP0
|
||||||
|
(byte) ATARI_TIA_WRITE::GRP1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMBL
|
||||||
|
(byte) ATARI_TIA_WRITE::HMCLR
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMM1
|
||||||
|
(byte) ATARI_TIA_WRITE::HMOVE
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::HMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ0
|
||||||
|
(byte) ATARI_TIA_WRITE::NUSIZ1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF0
|
||||||
|
(byte) ATARI_TIA_WRITE::PF1
|
||||||
|
(byte) ATARI_TIA_WRITE::PF2
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP0
|
||||||
|
(byte) ATARI_TIA_WRITE::REFP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESBL
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESM1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESMP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP0
|
||||||
|
(byte) ATARI_TIA_WRITE::RESP1
|
||||||
|
(byte) ATARI_TIA_WRITE::RSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::VBLANK
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELBL
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP0
|
||||||
|
(byte) ATARI_TIA_WRITE::VDELP1
|
||||||
|
(byte) ATARI_TIA_WRITE::VSYNC
|
||||||
|
(byte) ATARI_TIA_WRITE::WSYNC
|
||||||
|
(byte) MOS6532_RIOT::INTIM
|
||||||
|
(byte) MOS6532_RIOT::SWACNT
|
||||||
|
(byte) MOS6532_RIOT::SWBCNT
|
||||||
|
(byte) MOS6532_RIOT::SWCHA
|
||||||
|
(byte) MOS6532_RIOT::SWCHB
|
||||||
|
(byte) MOS6532_RIOT::T1024T
|
||||||
|
(byte) MOS6532_RIOT::TIM1T
|
||||||
|
(byte) MOS6532_RIOT::TIM64T
|
||||||
|
(byte) MOS6532_RIOT::TIM8T
|
||||||
|
(const byte*) MOS6532_RIOT::UNUSED[(number) $f] = { fill( $f, 0) }
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_COLUBK = (byte) 9
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_VBLANK = (byte) 1
|
||||||
|
(const byte) OFFSET_STRUCT_ATARI_TIA_WRITE_WSYNC = (byte) 2
|
||||||
|
(const nomodify struct ATARI_TIA_WRITE*) TIA = (struct ATARI_TIA_WRITE*) 0
|
||||||
(byte) col
|
(byte) col
|
||||||
(byte) col#1 col mem[1] 78.71428571428571
|
(byte) col#1 col mem[1] 78.71428571428571
|
||||||
(byte) col#12 col mem[1] 92.53846153846155
|
(byte) col#12 col mem[1] 92.53846153846155
|
||||||
|
Loading…
Reference in New Issue
Block a user