Hallo,
ich habe folgenden Code, der sich sehr schön assemblieren läßt.
Leider streikt der Linker, und meldet, dass er keine Funktion finden kann.
Der Fehler liegt in Zeile: 12 der Assembly.
Aber wie kann ich dies lösen ?
Mein Ziel ist es, Text auszugeben, der nach dem einstecken der Diskette bzw. ADF im WinUAE gestartet wird,
ohne das irgendwelche Bibliotheken gebraucht werden.
- start:
- move.l #0, d0 ; Setze Bildschirmkoordinaten (x=0, y=0)
- move.w #0x100, d1 ; Setze die Farbe (0x100 = Weiß)
- jsr DrawText ; Rufe die Funktion auf
- move.l #1, d0 ; Setze Bildschirmkoordinaten (x=1, y=0)
- jsr DrawText ; Rufe die Funktion auf
- rts
- DrawText:
- move.l $dff000, a0 ; Zeiger auf die Custom-Chips-Register <--- dies ist Zeile: 12 !!!
- move.l #0x1800, d2 ; Setze die Zeichenbreite (0x1800 = 24 Pixel)
- move.b #0x04, d3 ; Setze den Zeichensatz auf 8x8
- DrawLoop:
- move.b (a0), d4 ; Lade die Custom-Chips-Register
- bset #8, d4 ; Setze Bit 8 (Vertikale Blanking-Periode)
- move.b d4, (a0) ; Speichere die Custom-Chips-Register
- move.w (a0), d5 ; Lade die Custom-Chips-Register
- bclr #8, d5 ; Lösche Bit 8 (Vertikale Blanking-Periode)
- move.w d5, (a0) ; Speichere die Custom-Chips-Register
- move.b (a0), d4 ; Lade die Custom-Chips-Register
- btst #6, d4 ; Überprüfe Bit 6 (Bildschirm wird aktualisiert)
- bne DrawLoop ; Wenn Bildschirm noch aktualisiert wird, weiter
- move.b #0x20, (a0) ; Setze den Cursor auf Leerzeichen
- move.w (a0), d5 ; Lade die Custom-Chips-Register
- move.w d5, (a0) ; Speichere die Custom-Chips-Register
- add.l d2, d0 ; Erhöhe die X-Koordinate
- move.b d0, d4 ; Lade die X-Koordinate
- cmp.b #40, d4 ; Vergleiche mit Bildschirmbreite (40 Zeichen)
- blt DrawLoop ; Wenn kleiner, weiter
- rts
- buffer: ds.b 256 ; Puffer für den Text
ich verwende folgende Schritte (Programme unter MS-DOS - einige Tools stammen von MinGW - wie "sed"):
1. sed 's/;.*//' bootloader.asm > bootloader.s
2. m68k-amigaos-as.exe -o bootloader.o bootloader.s
3. m68k-amigaos-ld.exe -o bootloader.hunk -Ttext 0x0 -nostdlib bootloader.o
1. zum entfernen der Kommentare
2. assemblieren mit gnu as für m68k
3. linken mit gnu ld für m68k
3. ist leider nicht erfolgreich