introduction_to_programming_the_beamracer
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
introduction_to_programming_the_beamracer [2020/07/01 03:57] – [Local Memory] silverdr | introduction_to_programming_the_beamracer [2020/10/08 14:45] – [Local Memory] laubzega | ||
---|---|---|---|
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 $D030. To check if the board is indeed there, register $D030 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 compared with “0”. |
< | < | ||
- | LDX $D030 | + | VREG_CONTROL = $D031 |
+ | |||
+ | LDX VREG_CONTROL | ||
INX | INX | ||
BNE BEAMRACER_ALREADY_ACTIVE | BNE BEAMRACER_ALREADY_ACTIVE | ||
LDX #$42 | LDX #$42 | ||
- | STX $D030 | + | STX VREG_CONTROL |
LDX #$52 | LDX #$52 | ||
- | STX $D030 | + | STX VREG_CONTROL |
- | LDX $D030 | + | LDX VREG_CONTROL |
BEQ BEAMRACER_FOUND_AND_ACTIVATED | BEQ BEAMRACER_FOUND_AND_ACTIVATED | ||
RTS ; sadly, no BeamRacer... | RTS ; sadly, no BeamRacer... | ||
Line 39: | Line 41: | ||
==== Local Memory ==== | ==== Local Memory ==== | ||
- | For VASYL to execute a display list, it first needs to be placed in its local memory (LRAM). BeamRacer provides VASYL with 512KiB of LRAM, organized in 8 banks of 64KiB each. The 6510 can put data into LRAM using two one-byte wide ports. Each port is built out of five registers: | + | For VASYL to execute a display list, it first needs to be placed in its local memory (LRAM). BeamRacer provides VASYL with eight banks of 64KiB of LRAM each. The 6510 can put data into LRAM using two one-byte wide ports. Each port is built out of five registers: |
* [[registers# | * [[registers# | ||
Line 65: | Line 67: | ||
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 75: | Line 77: | ||
</ | </ | ||
- | 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 142: | Line 144: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48,13 | WAIT 48,13 | ||
MOV $20, 1 | MOV $20, 1 | ||
Line 149: | Line 150: | ||
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 161: | Line 161: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48, 0 | WAIT 48, 0 | ||
MOV $20,15 | MOV $20,15 | ||
Line 169: | Line 168: | ||
MOV $20,15 | MOV $20,15 | ||
END | END | ||
- | dlend: | ||
</ | </ | ||
Line 176: | Line 174: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48, 0 ; starting line | WAIT 48, 0 ; starting line | ||
MOV | MOV | ||
Line 184: | Line 181: | ||
MOV | MOV | ||
END | END | ||
- | dlend: | ||
</ | </ | ||
Line 210: | Line 206: | ||
<code vasyl> | <code vasyl> | ||
- | dlist: | ||
WAIT 48, 0 ; starting line | WAIT 48, 0 ; starting line | ||
loop: | loop: | ||
Line 223: | Line 218: | ||
BRA loop ; loop endlessly | BRA loop ; loop endlessly | ||
END ; never reached | END ; never reached | ||
- | dlend: | ||
</ | </ | ||
Line 247: | Line 241: | ||
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 263: | Line 256: | ||
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.txt · Last modified: 2021/09/10 01:49 by silverdr