introduction_to_programming_the_beamracer
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
introduction_to_programming_the_beamracer [2020/07/11 23:10] – laubzega | introduction_to_programming_the_beamracer [2021/09/10 01:49] (current) – [Initialization] silverdr | ||
---|---|---|---|
Line 21: | Line 21: | ||
In order to maintain a high level of compatibility with existing C64 software, BeamRacer remains hidden on power up, and the computer behaves as if it was not there. That is, register writes are ignored, and reads report the same values as those in a vanilla C64. | In order to maintain a high level of compatibility with existing C64 software, BeamRacer remains hidden on power up, and the computer behaves as if it was not there. That is, register writes are ignored, and reads report the same values as those in a vanilla C64. | ||
- | It is necessary to perform so-called “register knocking” for the board to reveal its presence. This is achieved by writing a sequence $42, $52 (screen codes for “BR”) to register $D031. To check if the board is indeed there, register $D031 can be then read and compared with “0”. | + | It is necessary to perform so-called “register knocking” for the board to reveal its presence. This is achieved by writing a sequence $42, $52 (screen codes for “BR”) to register $D031. To check if the board is indeed there, register $D031 can then be read and verified. Value of $FF means that BeamRacer was NOT activated.((Please note that early revisions of this chapter, and the code snippet below, advocated checking for $00 as an indicator that the BeamRacer was activated. This is now deprecated and may lead to "false negative" |
< | < | ||
- | VREG_CTRL1 | + | VREG_CONTROL |
- | LDX VREG_CTRL1 | + | |
+ | LDX VREG_CONTROL | ||
INX | INX | ||
BNE BEAMRACER_ALREADY_ACTIVE | BNE BEAMRACER_ALREADY_ACTIVE | ||
LDX #$42 | LDX #$42 | ||
- | STX VREG_CTRL1 | + | STX VREG_CONTROL |
LDX #$52 | LDX #$52 | ||
- | STX VREG_CTRL1 | + | STX VREG_CONTROL |
- | LDX VREG_CTRL1 | + | LDX VREG_CONTROL |
- | BEQ BEAMRACER_FOUND_AND_ACTIVATED | + | INX |
+ | BNE BEAMRACER_FOUND_AND_ACTIVATED | ||
RTS ; sadly, no BeamRacer... | RTS ; sadly, no BeamRacer... | ||
</ | </ | ||
Line 66: | Line 68: | ||
LDA #$20 | LDA #$20 | ||
STA VREG_ADR0H | STA VREG_ADR0H | ||
- | LDA #$01 ; advance LRAM pointer by one on every transfer | + | LDA #$01 ; advance LRAM pointer by one after every transfer |
STA VREG_STEP0 | STA VREG_STEP0 | ||
LDX #0 | LDX #0 | ||
Line 76: | Line 78: | ||
</ | </ | ||
- | On some occasions you may also want to read from LRAM with the CPU. There is an extra step involved, as many 6510 addressing modes result in a bus READ access before the requested WRITE occurs, which could lead to confusing results if not used with care. Register | + | On some occasions you may also want to read from LRAM with the CPU. There is an extra step involved, as many 6510 addressing modes result in a bus READ access before the requested WRITE occurs, which could lead to confusing results if not used with care. Register |
< | < | ||
- | LDA VREG_CTRL1 | + | LDA VREG_CONTROL |
ORA # | ORA # | ||
- | STA VREG_CTRL1 | + | STA VREG_CONTROL |
LDA #$00 | LDA #$00 | ||
Line 143: | Line 145: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48,13 | WAIT 48,13 | ||
MOV $20, 1 | MOV $20, 1 | ||
Line 150: | Line 151: | ||
MOV $20, 0 | MOV $20, 0 | ||
END ; this is a handy alias for instruction "WAIT 511, | END ; this is a handy alias for instruction "WAIT 511, | ||
- | dlend: | ||
</ | </ | ||
Line 162: | Line 162: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48, 0 | WAIT 48, 0 | ||
MOV $20,15 | MOV $20,15 | ||
Line 170: | Line 169: | ||
MOV $20,15 | MOV $20,15 | ||
END | END | ||
- | dlend: | ||
</ | </ | ||
Line 177: | Line 175: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48, 0 ; starting line | WAIT 48, 0 ; starting line | ||
MOV | MOV | ||
Line 185: | Line 182: | ||
MOV | MOV | ||
END | END | ||
- | dlend: | ||
</ | </ | ||
Line 211: | Line 207: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48, 0 ; starting line | WAIT 48, 0 ; starting line | ||
loop: | loop: | ||
Line 224: | Line 219: | ||
BRA loop ; loop endlessly | BRA loop ; loop endlessly | ||
END ; never reached | END ; never reached | ||
- | dlend: | ||
</ | </ | ||
Line 248: | Line 242: | ||
To make a counter run, we now need to use instruction " | To make a counter run, we now need to use instruction " | ||
- | <code vasyl [highlight_lines_extra=" | + | <code vasyl [highlight_lines_extra=" |
- | dlist: | + | |
WAIT 48, 0 ; starting line | WAIT 48, 0 ; starting line | ||
SETA | SETA | ||
Line 264: | Line 257: | ||
BRA loop ; will be skipped when counter 0 reaches 0 | BRA loop ; will be skipped when counter 0 reaches 0 | ||
END | END | ||
- | dlend: | ||
</ | </ | ||
introduction_to_programming_the_beamracer.1594534210.txt.gz · Last modified: 2020/07/11 23:10 by laubzega