Das ist das JavaCPC Expansion ROM:
Klar: Die Befehle zum Datei laden / speichern und andere Befehle sind natürlich speziell für den JavaCPC geschrieben, der hat eine Port-Erweiterung.
Aber die Befehle zum Kopieren / Schreiben vom Bildschirm solltest du dir ansehen.
Dort verwende ich Firmware-Calls, wie ich dir in meiner letzten Antwort schon verlinkt hatte.
Da stehen die CALLs drin, die du brauchst...
NOLIST
ORG &C000
;JavaCPC Expansion ROM
WRITE "JAVACPC.ROM" ; ROM schreiben
WRITE ASROM "JAVACPC.ROM",6 ; ROM schreiben
DB 1 ;1=KENNUNG FUER HINTERGRUND-ROM
DB 1 ;MARK NUMBER
DB 0 ;VERSION NUMBER
DB 1 ;MODIFICATION LEVEL
DW RSX_TABLE ;ZWEI-BYTE-ZEIGER AUF DIE NAMENS-TABELLE
JP INITROUTINE ;WIRD BEIM EINSCHALTEN DES RECHNERS ANGESPRUNGEN
JP Copy
JP Paste
JP Bank
JP Show
JP Hide
JP Online
JP Offline
JP Font1
JP Font2
JP Font3
JP Font4
JP Font5
JP Font6
JP Font7
JP Font8
JP Font9
JP Quit
JP Green
JP Grey
JP Grey
JP Color
JP Color
JP Digitracker
JP Assembler
JP Clear
JP Bigger
JP Smaller
JP Size
JP Screenshot
JP SaveDsk
JP MakeDsk
JP Scanlines
JP Scanlinesoff
JP Infomessage
JP Infomessage
JP Infofsmessage
JP setink
JP resetink
JP cddir
JP getdir
JP loadfile
JP bassave
JP mkdir
JP deletefile
JP deletefile
JP turboon
JP turbooff
JP z80on
JP z80off
JP showlogo
JP hextype
JP texttype
JP assemble
JP LOOPFLIP
RSX_TABLE: ;HIER BEGINT DIE NAMENS-TABELLE.
DB "JAVARO","M"+&80 ;DER NAME DER INIT ROUTINE
DB "COP","Y"+#80
DB "PAST","E"+#80
DB "BAN","K"+#80
DB "SHO","W"+#80
DB "HID","E"+#80
DB "ONLIN","E"+#80
DB "OFFLIN","E"+#80
DB "FONT","1"+#80
DB "FONT","2"+#80
DB "FONT","3"+#80
DB "FONT","4"+#80
DB "FONT","5"+#80
DB "FONT","6"+#80
DB "FONT","7"+#80
DB "FONT","8"+#80
DB "FONT","9"+#80
DB "QUI","T"+#80
DB "GREE","N"+#80
DB "GRE","Y"+#80
DB "GRA","Y"+#80
DB "COLOU","R"+#80
DB "COLO","R"+#80
DB "DIGITRACKE","R"+#80
DB "ASSEMBLE","R"+#80
DB "CLEA","R"+#80
DB "BIGGE","R"+#80
DB "SMALLE","R"+#80
DB "SIZ","E"+#80
DB "SCREENSHO","T"+#80
DB "SAVEDS","K"+#80
DB "MAKEDS","K"+#80
DB "SCANLINE","S"+#80
DB "SCANLINESOF","F"+#80
DB "INF","O"+#80
DB "HEL","P"+#80
DB "FSINF","O"+#80
DB "IN","K"+#80
DB "RESINK","S"+#80
DB "C","D"+#80
DB "CA","T"+#80
DB "LOA","D"+#80
DB "SAV","E"+#80
DB "M","D"+#80
DB "DE","L"+#80
DB "DELET","E"+#80
DB "TURB","O"+#80
DB "TURBOOF","F"+#80
DB "Z80TURB","O"+#80
DB "Z80TURBOOF","F"+#80
DB "LOG","O"+#80
DB "TYP","E"+#80
DB "HEXTYP","E"+#80
DB "ASSEMBL","E"+#80
DB "FLI","P"+#80
DB 0
;;CP 0
;;jp z, ARG0
;;CP 1
;;jp z,ARG1
;;CP 2
;;jp z,ARG2
;;...
;;ARG0, ARG1, ARG2 sind dann Labels, die jeweils
;;0, 1, 2... Argumente entgegennehmen
INITROUTINE
PUSH HL
PUSH BC
LD bc, &FEFE ; Emu Checker Port
IN a,(c)
CP &A0 ; JavaCPC
JR z,EMU_OK
EMU_ERROR
LD HL,ERROR_MESSAGE ; Zeiger auf Fehler-Text
CALL MESSPRI
POP BC
POP HL
SCF
CCF ; Carry loeschen, Initialisierung fehlgeschlagen
RET
EMU_OK
LD HL,PROMT_MESSAGE ;ZEIGER AUF PROMT-TEXT
CALL MESSPRI ;TEXT AUSGEBEN
POP BC
POP HL
SCF ;Carry setzen, ROM erfolgreich initialisiert
RET ;FERTIG
PROMT_MESSAGE
DB " JavaCPC exp. ROM v1.5 - |INFO for info",13,10
DB " JavaCPC IFS v1.1 - |FSINFO for info",13,10,10,0
ERROR_MESSAGE
DB " ***JavaCPC not found***",13,10,10,0
INFO_MESSAGE
;;DB "JavaCPC expansion ROM 1.5 by Devilmarkus"
;; DB " "
DB "|SHOW - open printer console "
DB "|HIDE - hide printer console "
DB "|ONLINE - sets printer online "
DB "|OFFLINE - sets printer offline "
DB "|CLEAR - clears printer console content "
DB "|BIGGER - increases fontsize of printer "
DB "|SMALLER - decreases fontsize "
DB "|SIZE,[size] - sets fontsize in pt "
DB "|FONT1 - |FONT9 - sets printerfont "
DB "|QUIT - quits JavaCPC emulator "
DB "|GREEN - emulates greenmonitor "
DB "|GRAY / |GREY - emulates graymonitor "
DB "|COLOR / |COLOUR - colourmonitor "
DB "|DIGITRACKER - Prodatron's Digitracker "
DB "|ASSEMBLER - Launch Z80 Assembler "
DB "|SCREENSHOT - Takes screenshot "
DB "|SAVEDSK - save actual DSK in DF0 "
DB "|MAKEDSK - creates a data formatted DSK "
DB "|SCANLINES/OFF- en-/dis-ables scanlines "
DB "|FLIP - Do a flipscreen (Space quits) "
DB "|INK,<0-31>,<R>,<G>,<B> - Def. new color"
DB "|RESINKS - Restores palette "
DB "|TURBO,|TURBOOFF,|Z80TURBO,Z80TURBOOFF ",13,0
INFOFS_MESSAGE
;;DB "JavaCPC Internal Filesystem v1.1 "
;;DB " "
DB " 1) RSX Command |CD "
DB " |CD,",34,"<drive:/ or /User/>",34," - set DIR"
DB " |CD,",34,"<folder>",34," - select folder "
DB " |CD,",34,"..",34," - 1 folder up "
DB " 2) Other commands "
DB " |CAT - Show directory contents "
DB " |MD,",34,"<DIRNAME>",34," - Create directory "
DB " |TYPE,",34,"<FILENAME>",34," - Show textfile "
DB " |HEXTYPE,",34,"<FILENAME>",34,"- Show hexdump"
DB " |ASSEMBLE,",34,"<FILENAME>",34,"- Assemble "
DB " |DEL,",34,"<FILENAME>",34," - Erase file "
DB " 1 wildchar allowed! *.bin or file*"
DB " |LOAD,",34,"<FILENAME>",34,"<,start> - Load "
DB " |SAVE,",34,"<NAME>",34," - Save BASIC program"
DB " |SAVE,",34,"<NAME>",34,",start,length<,run> "
DB " - Save BINARY program "
DB " 3) Informations "
DB " |SAVE can also save SNA or DSK. "
DB " Just add the required fileextension"
DB " |LOAD can load SNA and DSK. For DSK"
DB " add the drive no: "
DB " |LOAD,",34,"FILENAME.DSK",34,",0-3 ",13,0
Bank:
LD A,(IX+0)
AND 7
OR #C0
LD B,#7F
OUT (C),A
RET
list
Copy:
LD A,(IX+0)
AND 7
OR #C0
LD B,#7F
OUT (C),A
LD DE,&BF00
LD HL,copycode
LD BC,copycode_end-copycode
LDIR
CALL &BF00
ret
copycode:
CALL &B903
LD DE,&4000
LD HL,&C000
LD BC,&4000
LDIR
CALL &B900
RET
copycode_end:
nolist
Paste:
LD A,(IX+0)
AND 7
OR #C0
LD B,#7F
OUT (C),A
JP SCRPaste
RET
Show:
LD A,&fe
LD BC,&FF00
OUT (C),A
RET
Hide:
LD A,&ff
LD BC,&FF00
OUT (C),A
RET
Online:
LD A,&fb
LD BC,&FF00
OUT (C),A
RET
Offline:
LD A,&fa
LD BC,&FF00
OUT (C),A
RET
Font1:
LD A,&e0
LD BC,&FF00
OUT (C),A
RET
Font2:
LD A,&e1
LD BC,&FF00
OUT (C),A
RET
Font3:
LD A,&e2
LD BC,&FF00
OUT (C),A
RET
Font4:
LD A,&e3
LD BC,&FF00
OUT (C),A
RET
Font5:
LD A,&e4
LD BC,&FF00
OUT (C),A
RET
Font6:
LD A,&e5
LD BC,&FF00
OUT (C),A
RET
Font7:
LD A,&e6
LD BC,&FF00
OUT (C),A
RET
Font8:
LD A,&e7
LD BC,&FF00
OUT (C),A
RET
Font9:
LD A,&e8
LD BC,&FF00
OUT (C),A
RET
Quit:
LD A,&ef
LD BC,&FF00
OUT (C),A
RET
Green:
LD A,&d2
LD BC,&FF00
OUT (C),A
RET
Grey:
LD A,&d3
LD BC,&FF00
OUT (C),A
RET
Color:
LD A,&d0
LD BC,&FF00
OUT (C),A
RET
Digitracker:
LD A,&d1
LD BC,&FF00
OUT (C),A
RET
Assembler:
LD A,&d4
LD BC,&FF00
OUT (C),A
RET
Clear:
LD A,&fc
LD BC,&FF00
OUT (C),A
RET
Bigger:
LD A,&df
LD BC,&FF00
OUT (C),A
RET
Smaller:
LD A,&de
LD BC,&FF00
OUT (C),A
RET
Size:
LD A,(IX+0)
LD BC,&fF01
OUT (C),A
RET
Screenshot:
LD A,&d5
LD BC,&FF00
OUT (C),A
RET
SaveDsk:
LD A,&d6
LD BC,&FF00
OUT (C),A
RET
Scanlines:
LD A,&d7
LD BC,&FF00
OUT (C),A
RET
Scanlinesoff:
LD A,&d8
LD BC,&FF00
OUT (C),A
RET
MakeDsk:
LD A,&d9
LD BC,&FF00
OUT (C),A
RET
resetInk:
LD A,10
LD BC,&ff10
OUT (C),A
RET
setInk:
LD A,(IX+0)
LD BC,&ff40
OUT (C),A
LD A,(IX+2)
LD BC,&ff30
OUT (C),A
LD A,(IX+4)
LD BC,&ff20
OUT (C),A
LD A,(IX+6)
LD BC,&ff50
OUT (C),A
RET
Infomessage:
ld a,1
call &bc0e
LD HL,INFO_MESSAGE ;ZEIGER AUF PROMT-TEXT
CALL MESSPRI ;TEXT AUSGEBEN
showlogo:
LD A,&dd
LD BC,&FF00
OUT (C),A
ret
Infofsmessage:
ld a,1
call &bc0e
LD HL,INFOFS_MESSAGE ;ZEIGER AUF PROMT-TEXT
CALL MESSPRI ;TEXT AUSGEBEN
jp showlogo
MESSPRI ;HL=ZEIGER ;GIBT TEXTE AUS
LD A,(HL):OR A:RET Z
INC HL
CALL &BB5A
JR MESSPRI
SCRPaste:
XOR A,A
LD HL,&4000
LD DE,&C000
LOOP
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
DEC A
JP NZ,LOOP
RET
.getdir
ld bc,&fff4
ld a,1
out (c),a
ld a,255
out (c),a
call &bd19
call &bd19
call &bd19
jp wait2
ret
.cddir
CP 1
jp nz,return
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,0
out (c),a
jp rsxprint
ret
.texttype
CP 1
jp nz,return
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,10
out (c),a
jp rsxprint
ret
.hextype
CP 1
jp nz,return
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,9
out (c),a
jp rsxprint
ret
.assemble
CP 1
jp nz,return
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,15
out (c),a
jp rsxprint2
ret
.mkdir
CP 1
jp nz,return
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,5
out (c),a
jp rsxprint
ret
.deletefile
CP 1
jp nz,return
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,6
out (c),a
jp rsxprint
ret
.turboon
ld bc,&fff4
ld a,11
out (c),a
ld a,255
out (c),a
ret
.turbooff
ld bc,&fff4
ld a,12
out (c),a
ld a,255
out (c),a
ret
.z80on
ld bc,&fff4
ld a,13
out (c),a
ld a,255
out (c),a
ret
.z80off
ld bc,&fff4
ld a,14
out (c),a
ld a,255
out (c),a
ret
.bassave
CP 1
JP z,savebas
CP 3
JP z,savebin
CP 4
JP z,savebinstart
jp return
.savebas
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,4
out (c),a
jp rsxprint2
ret
.savebin
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,30
out (c),a
ld a,h
out (c),a
ld a,31
out (c),a
ld a,l
out (c),a
ld L,(IX+2)
ld H,(IX+3)
ld bc,&fff4
ld a,20
out (c),a
ld a,h
out (c),a
ld a,21
out (c),a
ld a,l
out (c),a
ld bc,&fff4
ld a,8
out (c),a
ld L,(IX+4)
ld H,(IX+5)
jp rsxprint2
ret
.savebinstart
ld L,(IX+0)
ld H,(IX+1)
ld bc,&fff4
ld a,40
out (c),a
ld a,h
out (c),a
ld a,41
out (c),a
ld a,l
out (c),a
ld L,(IX+2)
ld H,(IX+3)
ld bc,&fff4
ld a,30
out (c),a
ld a,h
out (c),a
ld a,31
out (c),a
ld a,l
out (c),a
ld L,(IX+4)
ld H,(IX+5)
ld bc,&fff4
ld a,20
out (c),a
ld a,h
out (c),a
ld a,21
out (c),a
ld a,l
out (c),a
ld bc,&fff4
ld a,8
out (c),a
ld L,(IX+6)
ld H,(IX+7)
jp rsxprint2
ret
.loadfile
ld L,(IX+0)
ld H,(IX+1)
CP 2
jp nz, loadfileb
ld bc,&fff4
ld a,20
out (c),a
ld a,h
out (c),a
ld a,21
out (c),a
ld a,l
out (c),a
ld a,2
out (c),a
ld L,(IX+2)
ld H,(IX+3)
ld bc,&fff4
ld a,2
out (c),a
jp rsxprint2
ret
.loadfileb
CP 1
jp nz,return
ld bc,&fff4
ld a,7
out (c),a
jp rsxprint2
ret
.rsxprint
call &bd19
call &bd19
call &bd19
ld B,(HL)
inc HL
ld E,(HL)
inc HL
ld D,(HL)
ld H,D
ld L,E
.looping
ld A,(HL)
inc HL
;call &BB5A
;---------------------------
push AF
push BC
push DE
push HL
push AF
ld BC,&FFF0
.wait
in a,(c)
cp &FF
jp nz,wait
pop AF
out (C),A
pop HL
pop DE
pop BC
pop AF
;---------------------------
dec B
jp nz,looping
ld bc,&fff4
call &bd19
call &bd19
call &bd19
.wait2
ld a,255
out (c),a
in a,(c)
cp &FF
jp z,wait2
cp &0
jp z,returnend
LD l,a
LD h,0
CALL &BB5A
call &bb09
CP 32
jp z,waitkey
CP 252
jp z,breakme
jp wait2
.breakme
LD BC,&fff0
LD a,2
OUT (C),a
jp wait2
.returnend
ret
.return
LD HL,syERROR_MESSAGE ;ZEIGER AUF PROMT-TEXT
CALL MESSPRI ;TEXT AUSGEBEN
RET
ret
syERROR_MESSAGE
DB "Internal filesystem error",13,10,0
LIST:END
.rsxprint2
ld B,(HL)
inc HL
ld E,(HL)
inc HL
ld D,(HL)
ld H,D
ld L,E
.looping2
ld A,(HL)
inc HL
;call &BB5A
;---------------------------
push AF
push BC
push DE
push HL
push AF
ld BC,&FFF0
.wait3
in a,(c)
cp &FF
jp nz,wait3
pop AF
out (C),A
pop HL
pop DE
pop BC
pop AF
;---------------------------
dec B
jp nz,looping2
ld bc,&fff4
ld a,&ff
out (C),A
ret
.waitkey
call &bb18
jp wait2
LOOPFLIP
LD BC,$BC00 + 12
OUT (C),C
LD BC,$BD30
OUT (C),C
CALL VBL
HALT
CALL &bb09
CP 32
JP z,QUITFLIP
LD BC,$BC00 + 12
OUT (C),C
LD BC,$BD10
OUT (C),C
CALL VBL
HALT
JP LOOPFLIP
VBL
LD B,$F5
WAITVBL
IN A,(C)
RRA
JR NC,WAITVBL
RET
QUITFLIP
RET
Speziell für dich:
copycode:
CALL &B903
LD DE,&4000
LD HL,&C000
LD BC,&4000
LDIR
CALL &B900
RET
Welches sind CALL &B903 und &B900? Das steht auf der Webseite die ich verlinkt hatte.
Du kannst genauso kopieren, und bevor du ins ROM zurück switchest, dann CALL &4000 ausführen, also so schwer ist das ja nun nicht, oder?
Allerdings das ROM dann erst vor dem CALL ausschalten, weil kopieren willste ja aus dem ROM und da ins ROM schreiben nunmal nicht funktioniert, wird es dann ja aus dem ROM ins RAM geschrieben...
Deswegen hatte ich dir die Seite verlinkt, weil es dort gleich an oberster Stelle steht: