Rom Copy Routine


Rom Copy Routine

von Heaven_tqa » Do 1. Nov 2007, 19:09
also ich probiere seit einiger Zeit das ROM ins darunterliegende RAM zu kopieren, doch irgendwie klappt das nicht... der Atari crashed und atari800win springt in den Monitor. Kann mir jemand kurz helfen?

Danke!

Code: Alles auswählen
witch_off_os_rom: lda $d301
         sta save_d301
         sei             ;stop interrups
            lda #0
         sta $d40e
         ldy #16      ;$1000
switch_off1 ldx #0
switch_off2   lda #$ff   ;switch ROM on
         sta $d301
         nop
switch_off20 lda $c000,x
         sta temp
         lda #$fe   ;switch ROM off
         sta $d301
         nop
         lda temp
         sta $c000,x
         inx
         bne switch_off2
         inc switch_off20+2
         dey
         bpl switch_off1
         ldy #32      ;$2000
switch_off3 ldx #0
switch_off4   lda #$ff   ;switch ROM on
         sta $d301
         nop
switch_off40 lda $e000,x
         sta temp
         lda #$fe   ;switch ROM off
         sta $d301
         nop
         lda temp
         sta $e000,x
         inx
         bne switch_off4
         inc switch_off40+2
         dey
         bpl switch_off3
         lda #$fe   ;switch off OS
         sta $d301
         cli
         lda #$40
         sta $d40e
         rts

von HiassofT » Do 1. Nov 2007, 19:18
Hi!

Ich habe mir Deinen Code jetzt nicht genauer angesehen, aber hier ist der Code den ich für den Highspeed SIO Patch verwende. Einzige Voraussetzung: ROM muß zu Beginn eingeschaltet sein.

so long,

Hias
Code: Alles auswählen
ROMRAM  SEI
        LDY #0
        STY $D400
        STY $D40E
        STY TMPVEC
        LDA #$C0
        STA TMPVEC+1
ROMMV   LDA (TMPVEC),Y
        DEC $D301
        STA (TMPVEC),Y
        INC $D301
        INY
        BNE ROMMV
        INC TMPVEC+1
        LDA TMPVEC+1
        BEQ ROMOK
        CMP #$D0
        BNE ROMMV
        LDA #$D8
        STA TMPVEC+1
        BNE ROMMV
ROMOK   DEC $D301
        LDA #$40
        STA $D40E
        CLI
        RTS

von HiassofT » Do 1. Nov 2007, 19:20
Ah, jetzt habe ich glaube ich auch den Fehler in Deinem Code entdeckt: Du musst auch beim STA $C000,X bzw. STA $E000,X die Page-Adresse erhöhen.

so long,

Hias

von Heaven_tqa » Do 1. Nov 2007, 21:07
ah....... :D ich frei...was man so nach 6 stunden programmieren nicht mehr sieht... ;) Danke!

von robbifan » So 4. Nov 2007, 19:03
welchen sinn macht es , das rom runter zu legen?

mfg

von cas » So 4. Nov 2007, 19:48
robbifan hat geschrieben:welchen sinn macht es , das rom runter zu legen?

mfg


Wenn man ds ROM in das darunterliegende RAM kopiert, dann kan man am Betriebssystem Änderungen vornehmen (was man ja im ROM nicht machen kann). Da RAM und ROM im gleichen Speicherbereich liegen, kann das ROM dan ausgeschaltet bleiben und der Atari läuft mit einem geänderten Betriebssystem im ROM.

Das geht, solange keine andere Software das RAM unter dem ROM benutzen möchte. Beispiele für Programme die dies tun sind Turbo-Basic XL, Bibo-DOS, Sparta-DOS ...

von Heaven_tqa » Do 15. Nov 2007, 00:08
ich mache das eher um schritt für schritt das OS komplett wegzubekommen und dadurch den vollen "56k"-ram speicher zu nutzen.

dazu muss ich eine kleine interrupt routine für die NMIs wie DLI, VBL und eben IRQs, wie tastaturabfrage installieren... und daher erstmal die einfache variante, dass OS ins RAM zu kopieren und dadurch langsam die anderen routinen wie PRINT und VBL ersetzen... so kann nichts zerschiessen... ;)

Carsten, hast du eine OS unabhängige INPUT oder GET_KEY routine in assembler? klein und kompakt?

von HiassofT » Do 15. Nov 2007, 15:19
Heaven_tqa hat geschrieben:Carsten, hast du eine OS unabhängige INPUT oder GET_KEY routine in assembler? klein und kompakt?


Ich bin zwar nicht der Carsten, kann Dir da aber trotzdem ein klein wenig helfen :-)

Lade Dir den TurboFreezer Source Code (letzte Version: http://www.horus.com/~hias/freezer/software/freezer-software-3.02pre5.zip) herunter und schaue in das File "src/freezer/GETKEY.M65". Das ist eine recht einfache GetKey Routine, die braucht nur einen Zähler, der bei jedem VBI um 1 hochgezählt wird (RTCLOCK+2). Achja: "KBCAPS" sollte ganz zu Beginn auf 0 gesetzt werden, das speichert den Zustand von Caps/Invers.

Eine Input-Routine gibt's auch, ist aber etwas komplizierter. Schau dazu ins File "src/freezer/MONITOR.M65". Ab "DEBU3" ist die Input-Routine, allerdings mit einer fixen Adresse für die Eingabezeile (CMDLINE). Sollte aber relativ einfach zu ändern sein.

so long,

Hias

von Heaven_tqa » Fr 16. Nov 2007, 00:03
Danke Hiass. So klein ist ja die Get_key dann doch nicht... ;)

von cas » Fr 16. Nov 2007, 11:38
Heaven_tqa hat geschrieben:Carsten, hast du eine OS unabhängige INPUT oder GET_KEY routine in assembler? klein und kompakt?


Nichts was besser ist als die Routinen von HIAS

Kurz geht es nur, wenn die Keyboard Interrupt Routine das OS wieder einblendet, den Tastendruck entgegennimmt, und dann wieder ausblendet. Ist das eine Option?

Carsten

von Heaven_tqa » Sa 17. Nov 2007, 12:14
auch schon daran gedacht und erstmal gescheitert... dazu müsste ich genau wissen, welchen bereich die tastatur routine im rom verbratet...nicht, dass das defragtmentiert ist...

von Heaven_tqa » Di 20. Nov 2007, 20:42
so...und wenn jetzt noch jemand eine nette ascii2screen routine hat? ;)

d.h. aus dem ascii zeichen direkt die screen version...wobei, eigentlich muss ich ja nur die tabelle ändern....oder?