Skip to content

Instantly share code, notes, and snippets.

@tom-seddon
Created July 28, 2016 23:22
Show Gist options
  • Save tom-seddon/fa3af98a58dda0b796e8084b4e560b2f to your computer and use it in GitHub Desktop.
Save tom-seddon/fa3af98a58dda0b796e8084b4e560b2f to your computer and use it in GitHub Desktop.
BBC Micro split bitmap/linear addressing mode "demo"
10REM>B.R62
20ONERRORMODE7:REPORT:PRINT" at line ";ERL:END
30MODE7
40*TV255 1
50PROCASM
60:
70MODE2:MODE6:HIMEM=&5800
80*FX154 0
90*FX9 0
100*FX10 1
110PROCR(1,32):PROCR(2,49):PROCR(3,&24):PROCR(4,38):PROCR(5,0):PROCR(6,32):PROCR(7,34):PROCR(8,1):PROCR(9,7):PROCR(10,0)
120:
130FORI%=0TO15:?&FE21=I%*16+(I%EOR7):NEXT
140:
150FORY%=0TO7
160?&70=FNV(Y%)
170?&71=FNV(Y%*16)
180?&72=?&70
190?&73=?&71
200A%=&5800+Y%*256
210FORX%=0TO255STEP4:A%!X%=!&70:NEXT
220NEXT
230:
240FORY%=0TO31
250IFY%AND1C%=&31 ELSEC%=&13
260?&70=FNV(C%)
270?&71=?&70:?&72=?&70:?&73=?&70
280A%=&7C00+Y%*32
290FORX%=0TO31STEP4:A%!X%=!&70:NEXT
300NEXT
301?&7FFF=FNV(&55)
310:
320PROCR(12,31)
330:
340CALLSTART
350END
360:
370DEFPROCASM
380FORI%=0TO2STEP2:P%=&900:[OPTI%
390.WAIT1:]FORJ%=1TO58:[OPTI%:NOP:]NEXT:[OPTI%:RTS
400:
410.START
420SEI
430OPT FNCRTC(4,53)
440OPT FNCRTC(7,50)
450OPT FNCRTC(5,6)
460OPT FNCRTC(6,40)
470.LOOP
480LDA#2:.WAITV:BIT&FE4D:BEQWAITV:STA&FE4D
490OPT FNCRTC(9,7)
500LDA#0:STA&FE21
510]
520FORJ%=0TO100:[OPTI%:JSRWAIT1:]NEXT
530[OPTI%
540OPT FNCRTC(9,4)
550LDA#&7:STA&FE21:JMP LOOP
560]
570NEXT
580ENDPROC
590:
600DEFFNCRTC(R%,V%):[OPTI%:LDA#R%:STA&FE00:LDA#V%:STA&FE01:]=I%
610:
620DEFPROCR(R%,V%):?&FE00=R%:?&FE01=V%:ENDPROC
630:
640DEFFNV(X%):LOCALI%,R%
650FORI%=0TO3
660IFX%AND2^I%R%=R%OR2^(2*I%)
670IFX%AND2^(I%+4)R%=R%OR2^(2*I%+1)
680NEXT
690=R%
700
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment