PET 2-Pass Assembler v4.7 mit PROGRAM-LOADER - (BASIC4)

  • Puh, wenn ich schon die ganzen $-Dinger sehe, bin ich noch mehr verwirrt, als vorher. Assembler ist echt was für außerordentlich intelligente Menschen- oder aber, ich bin nicht die hellste Kerze auf der Torte. Kann auch gut sein. :)

    Mir hilft gerade sehr das Buch: Programming the Pet/CBM von Raeto West.


    Hex $033a (Dez 826) ist die Startadresse für den zweiten "Kassettenbuffer". Man kann diesen Bereich nutzen um Programme abzulegen. $4e20 (20000) ist ein freier Speicherbereich (wo ich erst einmal den Code hin kompiliere). Das klappt gut. Wenn ich nun aber ein Basic Loader erstelle, da ich nicht mit SYSxxx sondern mit RUN starten möchte, dann sollte das Programm ab $0401(1025) abgelegt werden.

    Ich suche: Atari 800, MPF-IP

  • Alles klar, dann hilft mir der Supermon weiter, hier kann ich dann Speicherbereiche verschieben.


    Ich habe mir mal Just for Fun ein Basic Loader erstellt (die letzten drei bzw. vorletzten beiden Befehle nur zum Testen):


    1000 *=$0401:&=20000

    1010 .$1B,$04,$0A,$00,$8F,$20,$28

    1020 .$43,$29,$32,$30,$32,$30,$20,$57

    1030 .$57,$57,$2E,$4D,$52,$59,$53,$2E

    1040 .$44,$45,$00,$26,$04,$14,$00,$9E

    1050 .$20,$31,$30,$36,$34,$00,$00,$00

    1060 ;BASIC START

    1070 ;10 REM (C)2020 http://WWW.MRYS.DE

    1080 ;20 SYS 1064

    1090 ;

    1100 LDA #$00

    1110 STA $8000

    1120 RTS


    wenn man den nun mit .a kompiliert kann man den Speicherbereich von 20000 bis xxx mit Supermon nach $0401 verschieben und dann mit .s speichern (vermutlich werden dann die Labels nicht mehr funktionieren...ich muss es einfach ausprobieren 😉). Nach dem Laden mit load"xxx",8 kann das Programm mit RUN gestartet werden. 1064 ($0428) ist dann die Einsprungadresse in der das "Maschinenprogramm" losgeht.


    Jetzt kann es losgehen mit meinem Spiel "Jumpy" 😊


    Ich danke Euch für Euer Feedback!


    Beste Grüße

    Marco

    Ich suche: Atari 800, MPF-IP

    Einmal editiert, zuletzt von discmix ()

  • Alles klar, dann hilft mir der Supermon weiter, hier kann ich dann Speicherbereiche verschieben.

    Ich behelfe mir immer mit einem Diskmonitor, indem ich die ersten beiden Bytes der Datei (Ladeadresse) fake.


    Am C64 geht es ganz einfach, da kann man schon im Standard gezwungen ab 0800H laden.


    Manche Monitor Programme haben auch einen .L Befehl wo man die Adresse angeben kann.

    Vielleicht implementiere ich das in dem Assembler, würde Sinn machen.

  • Hi Diddl,


    meine Test sind nun abgeschlossen. Dein Assembler tut aufm 3032 (Basic 2) was er soll! 😉

    Ich war heute fleißig und habe ihn ausgiebig getestet.


    Das hier hat er ohne murren geschluckt (Wer mir vom Ergebnis ein Screenshot hie reinstellt bekommt beim nächsten Mitgliedstreffen 1 Bierchen 😊):

    1000 *=20000:&=20000

    1025 SCREEN = $8000

    1050 SETCURSOR = $E25D

    1075 CURROW = $C6

    1100 CURCOL = $D8

    1125 CHAR = $D1

    1150 DELAY = $40

    1175 COUNTER = $FC

    1200 BSOUT = $FFD2

    1225 CLRSCR = $E229

    1250 ;

    1275 JSR CLRSCREENMAIN

    1300 JSR PRINTSCREENMAIN

    1325 RTS

    1350 ;

    1375 CLRSCREENMAIN

    1400 ;

    1425 LDA #$20

    1450 LDX #$00

    1475 CLRSCREENLOOP

    1500 STA SCREEN,X

    1525 STA SCREEN+(4*40),X

    1550 STA SCREEN+(8*40),X

    1575 STA SCREEN+(12*40),X

    1600 STA SCREEN+(16*40),X

    1625 STA SCREEN+(20*40),X

    1650 INX

    1675 CPX #$A0

    1700 BNE CLRSCREENLOOP

    1725 RTS

    1750 ;

    1775 PRINTSCREENMAIN

    1800 ;

    1825 LDX #$00

    1850 LOOPPSM

    1875 STX COUNTER

    1900 LDY TITLETEXTPOSX,X

    1925 TYA

    1950 STA CURROW

    1975 LDA TITLETEXTPOSY,X

    2000 STA CURCOL

    2025 JSR SETCURSOR

    2050 LDA #CHAR

    2075 JSR BSOUT

    2100 JSR DELAYMAIN

    2125 JSR DELAYMAIN

    2150 JSR DELAYMAIN

    2175 JSR DELAYMAIN

    2200 JSR DELAYMAIN

    2225 LDX COUNTER

    2250 INX

    2275 LDY TITLETEXTPOSX,X

    2300 CPY #$FF

    2325 BNE LOOPPSM

    2350 RTS

    2375 ;

    2400 ;

    2425 DELAYMAIN

    2450 ;

    2475 LDY #$FF

    2500 LOOPDELAY

    2525 DEY

    2550 BNE LOOPDELAY

    2575 RTS

    2600 ;

    2625 TITLETEXTPOSY

    2650 ;

    2675 ;J = 25 ZEICHEN

    2700 .$01,$01,$01,$01,$01,$02,$03,$04

    2725 .$05,$06,$07,$08,$09,$0A,$0B,$0C

    2750 .$0D,$0E,$0E,$0E,$0E,$0E,$0D,$0C

    2775 .$0B

    2800 ;

    2825 ;U = 17 ZEICHEN

    2850 .$08,$09,$0A,$0B,$0C,$0D,$0E,$0E

    2875 .$0E,$0E,$08,$09,$0A,$0B,$0C,$0D

    2900 .$0E

    2925 ;

    2950 ;M = 19 ZEICHEN

    2975 .$08,$09,$0A,$0B,$0C,$0D,$0E,$08

    3000 .$08,$08,$09,$0A,$08,$09,$0A,$0B

    3025 .$0C,$0D,$0E

    3050 ;

    3075 ;P = 24 ZEICHEN

    3100 .$08,$09,$0A,$0B,$0C,$0D,$0E,$0F

    3125 .$10,$11,$12,$08,$08,$08,$08,$09

    3150 .$0A,$0B,$0C,$0D,$0E,$0E,$0E,$0E

    3175 ;Y = 26 ZEICHEN

    3200 ;

    3225 .$08,$09,$0A,$0B,$0C,$0D,$0E,$0E

    3250 .$0E,$0E,$08,$09,$0A,$0B,$0C,$0D

    3275 .$0E,$0F,$10,$11,$12,$12,$12,$12

    3300 .$12

    3325 ;

    3350 .$FF

    3375 ;

    3400 TITLETEXTPOSX

    3425 ;

    3450 .$06,$07,$08,$09,$0A,$0A,$0A,$0A

    3475 .$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A

    3500 .$0A,$0A,$09,$08,$07,$06,$06,$06

    3525 .$06

    3550 ;

    3575 .$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0D

    3600 .$0E,$0F,$10,$10,$10,$10,$10,$10

    3625 .$10

    3650 ;

    3675 .$12,$12,$12,$12,$12,$12,$12,$13

    3700 .$14,$15,$14,$14,$16,$16,$16,$16

    3725 .$16,$16,$16

    3750 ;

    3775 .$18,$18,$18,$18,$18,$18,$18,$18

    3800 .$18,$18,$18,$19,$1A,$1B,$1C,$1C

    3825 .$1C,$1C,$1C,$1C,$1C,$1B,$1A,$19

    3850 ;

    3875 .$1E,$1E,$1E,$1E,$1E,$1E,$1E,$1F

    3900 .$20,$21,$22,$22,$22,$22,$22,$22

    3925 .$22,$22,$22,$22,$22,$21,$20,$1F

    3950 .$1E

    3975 ;

    4000 .$FF


    PET/CBM rocks!!! 🤟

    Ich suche: Atari 800, MPF-IP

  • Böhmische Dörfer, Burschen?! Mir hauts bei diesen kryptischen Listings meine restlichen Synapsen so durcheinander, dass die Einweisung kurz bevor steht. :D


    Wie muss ich das abtippen und wie kann ich das speichern? Ok, lassen wir das...

    Ich möchte das auch können! :)


    Viele Grüsse,
    Matthias

  • Bravo, sehr gut, du warst fleißig!


    Tip:

    Die Lesbarkeit erhöht sich stark wenn man Labels hervorhebt.

    Deswegen rücke ich Assembler Befehle ein.

    Indem ich ein : schreibe als erstes Zeichen.


    Tip 2

    Manchmal kann man verzichten auf lokale Labels.

    Wenn ich zb. Nur einen Befehl überspringe.


    CPX #4

    BNE *3

    JMP xxxx1

    CPX #7

    BEQ *1

    RTS

    ...


    Der Stern Operator ermöglicht die direkte Eingabe der Sprung Distanz in Bytes.