From 313b5a20ab627db6df4a242fe3c3a87feb077e33 Mon Sep 17 00:00:00 2001 From: giomba Date: Sun, 4 Dec 2022 18:06:59 +0100 Subject: [PATCH] Load BASIC program in memory, but does not start :-( --- res/basicstart.asc | 2 + res/basicstart.bin | Bin 0 -> 8 bytes res/data.raw | Bin 0 -> 1542 bytes res/stillenacht.raw | Bin 0 -> 1534 bytes src/main.asm | 160 ++++++++++++++++++++++++++++++++++++++------ 5 files changed, 143 insertions(+), 19 deletions(-) create mode 100644 res/basicstart.asc create mode 100644 res/basicstart.bin create mode 100644 res/data.raw create mode 100644 res/stillenacht.raw diff --git a/res/basicstart.asc b/res/basicstart.asc new file mode 100644 index 0000000..4bc133c --- /dev/null +++ b/res/basicstart.asc @@ -0,0 +1,2 @@ +07 10 01 00 8a 00 00 00 + diff --git a/res/basicstart.bin b/res/basicstart.bin new file mode 100644 index 0000000000000000000000000000000000000000..f115092938439b730d8f93ffb404a41fdbde10bd GIT binary patch literal 8 PcmZPU5MON6h6r)E>a}FQl!-JvQs7{l-y({GiIao+Ou^qZ*z3!Jw0#8UgI2$-)8rTEQj;U|QE`jHzhdA3u zwr~5+0H0mCwJ^0K`9 zE=kVSxvLd{OY$NoBR41rH^f}u%6m$%<=cI1ON0&i z_slPHvpVyCa)+|FB7?G(p&K)ohGKFm#IRvG2F%D@+R8p8X9QkUUV_o2k=x!h%^kPf zX?Z6{jV3~7*D}oX8MZde$+LU`N0qa%l;qYrN<361re)-ow+w5_=P)_Y$f@i3Q;e64 z7IQ*8zj(qq9_AXKWQf>y8@lQ%912RP3s0$U za46)EL*cM`ltWPo+3>o0l0$I`wc&(%nnUQR2=8>@jQSpj1|{@3oLAR5G-i+m*VK!` zoEgm4$djb!FZM_>B0cPxcN)G?FY^}sq+St{Mvh(fr`YBVS~Q$3^P~X_+AV?alZKIh z+4L8U4IIFQXbiIUBX7iR?JuF47PPblv6y3G;(WMO2F~1$1)pfIig*leYDdIT+Q^%X92y^D6`Pl~?+oJtV(_bWOq_G$TREP{ zI&B=feo8Eh;eQ(x9@F0uxxxR2fu{aJQAbBVFD?zyaR+bi5ccc2xEw&De^yopGyNJ1 zKur`R@S6UexOTZYGkRoj2pdv=I*d{RZ|b+jV{k&hQ?+%7x!=`)ul!ivii>xCU9Z=w zJHHB_>U(SRt4$m=c0YRy|KYmcs^L3vqX126z)gLB4VU>>4B*;L#DCMrJW!o{RJ=nb R$ySP&>QDW-+A4ni{{cCZl~Vu! literal 0 HcmV?d00001 diff --git a/res/stillenacht.raw b/res/stillenacht.raw new file mode 100644 index 0000000000000000000000000000000000000000..c28a03c6d27285896e455542a3638bab68391734 GIT binary patch literal 1534 zcmaJ>U5Fc16h4_KEK(%%b4!s@<7HDaWhirJl1ZFkC7HiY)Krooq)&Z%seY{C>*OjEZ9D>eao{4 z_%zB)t+7SnRIPR&NqfvFT&OAAYlODX2AIWj0-oXXnkHz^j#ywtc8ErD+T--?+RmI# z&@|d&_`{?~mn*dSpu9^+A_OCpM0kwtf~Ne45QHcQQ4nqyaFemT`#usZ@}j)w9z~qo z4R%4U-;?AgI4`4sPW$x$j}}-S)-EFoSL8)OhK`>TPJp#;%6kj28ixkK4kl77+3z=^m^T`>d|VA`M<16JfNEoDEFGYZcuFTiNh$Sil7WVX}owA?eJ zMiU{UYwAYw43BkV@~jBpgmNC1;>=t}iHpkEF!juImtjr$3?>H~8FO53iuvNvVn(U! z2`@ z0QwwY@V8rHP_ z-@pM}3dbO8KZ!={(f+EG(}I?^Amww6^^CdsWHB(|u(n%TqtipN7odS2J=mYnUNP7n z9UV%73H~=|d!^+Vj%%*O)3w}l(_|wyx-OzinlCN+cqJIDY9k@Q+X3%sGijKKif~zb zPMQz5io~hYG2vtFWeK;zE$z58N*Y;{lSBOjJjLdf?JHfsgc$s)os{On_*RBH(oP$P zPTrJ?!-&@ggU86*k}&w+G|(jP=jZ5~cDcd^4+V7CxOFyQ&;^3WMC-rK1=U3qq zvadS7*2Ga`_tQ7<4PTO06~BqEa?oHp+#(067-nB{Kxj7+|BZ}AqB{LB|Aq{juH+xp LpX5k&6#)JLYrT}Q literal 0 HcmV?d00001 diff --git a/src/main.asm b/src/main.asm index 775c147..c38e738 100644 --- a/src/main.asm +++ b/src/main.asm @@ -1,27 +1,93 @@ processor 6502 +srcPointer = $b5 +dstPointer = $b7 +dstPointerEnd = $b9 +fake_current_byte = $126 +count = $128 + org $a000 - WORD .coldstart - WORD .warmstart + WORD coldstart + WORD warmstart BYTE #$41, #$30, #$c3, #$c2, #$cd -.coldstart: +coldstart SUBROUTINE cld sei - ;jmp .coldstart - jsr $fd8d - jsr $fd52 - jsr $fdf9 - jsr $e518 + + jsr $fd8d ; initialize and test RAM + jsr $fd52 ; restore default I/O vectors + jsr $fdf9 ; initialize I/O registers + jsr $e518 ; initialize hardware + cli ; enable interrupts + lda $0288 sta $0294 - jsr $e45b - jsr $e3a4 - jsr $e404 - cli -.warmstart: + jsr $e45b ; initialize BASIC vector table + jsr $e3a4 ; initialize BASIC RAM locations + jsr $e404 ; print startup message and initialize memory pointers + ldx #$fb ; value for stack start + txs ; set stack pointer + lda #$80 ; set for control messages only + jsr $ff90 ; control kernal messages + +.oracopio: + jsr copycode +.almost_ready: + + + ; setup fake chrin + ; sei + ; lda #0 + ; sta fake_current_byte + ; lda #fake_chrin + ; sta $325 + ; cli + + jmp $c483 ; BASIC + +fake_input_line: + BYTE "RUN", #$0d + +fake_chrin SUBROUTINE + ldy fake_current_byte + lda fake_input_line,y + iny + sty fake_current_byte + cpy #4 + bne .end_fake_chrin + sei + lda #$f2 + sta $324 + lda #$0e + sta $325 + cli +.end_fake_chrin: + clc + rts + + ; jsr $e3a4 ; initialize BASIC RAM locations + + ; ldx #$00 ; BASIC execute pointer + ; ldy #$10 + ; stx $7a + ; sty $7b + ; save to 7a !!!!!! + + ; BASIC "RUN" + ; lda #$8a + ; sta $200 + ; lda #$0 + ; sta $201 + ; lda #$8a + ; jmp $c7ed + + +warmstart SUBROUTINE lda #$02 ldx #$00 clear_color_ram: @@ -35,7 +101,7 @@ clear_color_ram: ldx #$00 print: lda message,x - beq .end + beq infine_loop sec sbc #$40 sta 7724,x @@ -45,20 +111,76 @@ print: inx jmp print -.end: - - -restart: +infine_loop: ldx #$00 loop: stx 7680 dex bne loop - jmp restart + jmp infine_loop +copycode SUBROUTINE + sei + lda #0 + sta count + sta count + 1 + + lda #basicdemo + sta srcPointer + 1 + + lda #$01 + sta dstPointer + lda #$10 + sta dstPointer + 1 + + ldy #0 +copyloop: + lda (srcPointer),y + sta (dstPointer),y + inc srcPointer + bne .noinc1 + inc srcPointer + 1 +.noinc1: + inc dstPointer + bne .noinc2 + inc dstPointer + 1 +.noinc2: + + inc count + bne .noinc3 + inc count + 1 +.noinc3: + + ; LENGTH + lda count + cmp #$00 + bne copyloop + lda count + 1 + cmp #$06 + bne copyloop + + cli +.finito: + rts + +; lda srcPointer +; cmp #demoend +;.remainder: +; bne copyloop +; rts + message: BYTE "CIAO DEVELER BY GIOMBA",#$0 +basicdemo: + .incbin "res/stillenacht.raw" +demoend: + . = $bfff BYTE #$ff