Skip to content

Latest commit

 

History

History
112 lines (85 loc) · 4.05 KB

rom_images_laden.md

File metadata and controls

112 lines (85 loc) · 4.05 KB

ROM images, laat IK daar nu geen reet van snappen.

   ROM-IMAGES LADEN

Op de CD's van MCCM staan heel wat rom-images. Ook op andere CD's (die illegaal zijn) en via internet (idem dito) zijn heel wat roms te verkrijgen. Op een MSX-emulator zijn deze eenvoudig te gebruiken, maar op een MSX is het een stuk lastiger.

Er is een programmaatje dat rom-images inlaadt en start, maar bij mij werken de meeste spelletjes niet of niet goed. Ik heb geen DOS2, dus ik denk dat het daar aan ligt. In deze tekst zal ik beschrijven hoe je een programaatje kunt maken en toch rom-images (van 16kB) kunt gebruiken, en natuurlijk staat een simpele lader ook op de FD.

De rom-images beginnen met de letters AB en vervolgens 2 bytes die het adres weergeven waar na initialisatie heen wordt gesprongen. De letters AB mag je wissen, zodat het spel niet automatisch opstart na het resetten.

De 2 bytes na AB kun je gebruiken om te kijken op welk adres je het programma moet zetten. Als het adres groter is dan #3FFF, dan kun je de rom-image op het interval #4000-#7FFF laden en anders vanaf adres #0000.

Verder moet er op pagina 1 en soms op 0 ram geschakeld zijn. Onder DOS is dit altijd het geval, maar onder BASIC niet. Je kunt met het volgende programmaatje op pagina 1 tot en met 3 hetzelfde ram-slot selecteren. Als op pagina 0 ook RAM moet staan, dan moet je vier keer RRA gebruiken in plaats van twee keer.

    in      a,(#a8)         ; Lees huidige stand
    and     240             ; Hoogste 4 bits zijn onder
    ld      b,a             ; BASIC altijd al RAM
    rra                     ; Schuif de bits naar rechts
    rra
    or      b               ; Oude stand erbij
    out     (#a8),a         ; Schrijf slotstand weg

Zo, nu weet je alles om een 16kB rom-image te gebruiken. Nu gaan we daadwerkelijk het programma maken (niet helemaal natuurlijk, maar alleen de code waar je problemen mee kunt krijgen. De volledige source staat op deze FD in de file ROM16.LZH, waar ook een simpele BASIC-lader in staat) waarmee je 16kB rom-images mee kunt inladen. Het programma aanpassen voor 32kB is trouwens erg makkelijk.

    org     #c000

Onder BASIC erg logisch, want op adres #4000-#7FFF mag niets geladen worden.

    ld      de,fcb
    ld      c,open_file
    call    bdos            ; open de rom-image

    call    initFCB         ; initialiseer FCB om te
                            ; laden

    ld      de,#8000
    ld      c,setdta        ; Zet adres waar de data
    call    bdos            ; terecht komt

    ld      hl,16384
    ld      de,fcb
    ld      c,read_block
    call    bdos            ; Lees file in

    di                      ; Interrupts uit

    call    selram          ; Schakel RAM in

    ld      hl,#8000        ; Wis A van AB zodat rom niet
    ld      a,0             ; na reset opstart
    ld      (hl),a
    ld      bc,#4000        ; Grootte
    ld      de,#4000        ; Bestemming
    ld      a,(#8003)       ; Check startadres van rom
    cp      #40
    jp      nc,jump1        ; >#4000 -> Bestemming is
                            ; goed

    ld      de,#0000

jump1: ldir ; Verplaats

    ld      hl,(#8002)      ; Laadt start adres
    jp      (hl)            ; en spring ernaar toe

Het gebruik van ROM-images die groter dan 32kB zijn is veel lastiger, omdat die schakelroutine's gebruiken die bij bepaalde roms de data op andere adressen schakelen dan bij andere roms. Daarom heeft fMSX bij het selecteren van roms een optie om de cartridge-type te kiezen, zodat de roms wel werken. Het programma LOADROM (voor MSX) kan wel mega-roms aan, maar dat programma werkt alleen onder DOS2 goed en laat ik die nou net niet hebben. Een ander probleem is het geheugen, want bij mega-roms heb je gewoon meer dan 128kB geheugen nodig. Ook een probleem is dat de roms zelf ook naar ram schrijven en dus je kopie kunnen overschrijven waardoor alles in de soep loopt.

Veel plezier en succes!

Arjan Bakker