Autor Thema: Ein ROM erstellen "hallo welt" ?  (Gelesen 14182 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Devilmarkus

  • Administrator
  • CPC 464+
  • *****
  • Beiträge: 1113
  • Liked: 367
  • Karma: +39/-0
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #15 am: 29. November 2018, 14:44:34 »
So zB?

public static void copy_40_c0()
  asm inline (Indirections.Values())
  {
    ld de,#c000
    ld hl,#4000
    ld bc,#4000
    ldir
  }

Nur umgekehrt?
Und statt der "Von-Adresse" ein Label verwenden für den Code, der dort hin kopiert werden soll....
Und statt der Länge ein End-Label minus Label von dem Code, der kopiert werden soll...
http://cpcwiki.de
Dein Deutsches CPCWiki!

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #16 am: 29. November 2018, 15:24:02 »
Dieses funktioniert nicht im ROM .
Warum nicht, wollte nur ein Byte nach &4003 kopieren.
Die Speicherstelle &4003 zeigt mit "print peek(&4003) "0" an.

Gruss

------------------------------
.rsxscr
  ld hl,&4003
  ld (hl),127
  ret 
-----------------------------

noheader
write "rsxscr.rom"
nolist
limit &ffff
org &c000

;--------------------------------------
;reserves 32 bytes for workspace:
;0-17 used by double
;--------------------------------------
;rom prefix
;--------------------------------------
defb 1 ;rom type ... background
defb 1 ;mark 1
defb 1 ;version 1
defb 1 ;modification 1
;--------------------------------------
;command table
;--------------------------------------
defw name_table
jp initialise_rom ;power-up/reset entry
JP rsxscr
;--------------------------------------
;name table
;--------------------------------------
.name_table
defb "RSXSC","R"+&80       
defb 0   
;---------------------------------------
;power-up/reset intialisation
;af,bc corrupted
;---------------------------------------
.initialise_rom
push de:push hl ;save de/hl
call print_string; print power-up message
defb 13,10
defb "rsxscr im rom"
defb 13,10,10
defb 0
pop hl:pop de ;restore hl/de
and a
ld bc,32:sbc hl,bc ;grab 32 bytes from top of memory
scf
ret

.print_string
pop hl ;get string address
. sp_loop
ld a,(hl):call &bb5a ;print character
inc hl
or a ;done?
jr nz,sp_loop
jp (hl)
  ret

.rsxscr
  ld hl,&4003
  ld (hl),127
  ret             
list
end

Offline Devilmarkus

  • Administrator
  • CPC 464+
  • *****
  • Beiträge: 1113
  • Liked: 367
  • Karma: +39/-0
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #17 am: 29. November 2018, 17:46:55 »
http://cpcwiki.de
Dein Deutsches CPCWiki!

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #18 am: 30. November 2018, 08:48:06 »
Hallo, guten Tag.

Kannst du mir bitte helfen die Daten nach &4000 zu  übertragen und mit Call &400 starten?
Bitte mal ein Muster erstellen.

Danke.
Gruss

noheader
write "rsxscr4.rom"
nolist
limit &ffff
org &c000

defb 1 ;rom type ... background
defb 1 ;mark 1
defb 1 ;version 1
defb 1 ;modification 1

defw name_table
jp initialise_rom ;power-up/reset entry
jp rsxscr4    ;double height printing

.name_table
defb "PEBI","E"+&80   ;bad name
defb "RSXSCR","4"+&80     ;double,@a$
defb 0

.initialise_rom
push de:push hl ;save de/hl
call print_string; print power-up message
defb 13,10
defb "rom screen"
defb 13,10,10
defb 0
pop hl:pop de ;restore hl/de
and a
ld bc,32:sbc hl,bc ;grab 32 bytes from top of memory
scf
ret

.print_string
pop hl ;get string address
. sp_loop
ld a,(hl):call &bb5a ;print character
inc hl
or a ;done?
jr nz,sp_loop
jp (hl)
ret

.prog_table
DEFB &CD, &73, &40, &C9, &21, &FE, &FF, &ED, &5B, &71, &40
DEFB &19, &01, &00, &C0, &71, &23, &70, &21, &FC, &FF, &ED
DEFB &5B, &71, &40, &19, &01, &00, &00, &71, &23, &70, &21
DEFB &FC, &FF, &ED, &5B, &71, &40, &19, &4E, &23, &46, &21
DEFB &00, &40, &B7, &ED, &42, &DA, &70, &40, &21, &FE, &FF
DEFB &ED, &5B, &71, &40, &19, &E5, &21, &FE, &FF, &ED, &5B
DEFB &71, &40, &19, &5E, &23, &56, &EB, &23, &44, &4D, &E1
DEFB &71, &23, &70, &21, &FE, &FF, &ED, &5B, &71, &40, &19
DEFB &5E, &23, &56, &EB, &36, &81, &21, &FC, &FF, &ED, &5B
DEFB &71, &40, &19, &5E, &23, &56, &13, &72, &2B, &73, &C3
DEFB &20, &40, &C9, &00, &00, &2A, &71, &40, &E5, &ED, &73
DEFB &71, &40, &21, &FC, &FF, &39, &F9, &CD, &04, &40, &2A
DEFB &71, &40, &F9, &E1, &22, &71, &40, &C9

.rsxscr4

call &b906
push af      ;enable lower rom
............................
        ...........................
pop af
call &b90c   ;restore lower rom state

ret
list
end

Offline Devilmarkus

  • Administrator
  • CPC 464+
  • *****
  • Beiträge: 1113
  • Liked: 367
  • Karma: +39/-0
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #19 am: 30. November 2018, 13:55:48 »
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:
« Letzte Änderung: 30. November 2018, 14:13:02 von Devilmarkus »
http://cpcwiki.de
Dein Deutsches CPCWiki!

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #20 am: 30. November 2018, 14:36:15 »
Danke für deine große Info. ist viel drin in deine Auskunft.

Ich suche bitte noch eine Routine für mein Programm, wie ich diese Daten , die sich im Programm befinden nach $4000 bringe:
------------------------------------
.prog_table   
   DEFB &CD, &73, &40, &C9, &21, &FE, &FF, &ED, &5B, &71, &40
   DEFB &19, &01, &00, &C0, &71, &23, &70, &21, &FC, &FF, &ED
   DEFB &5B, &71, &40, &19, &01, &00, &00, &71, &23, &70, &21
   DEFB &FC, &FF, &ED, &5B, &71, &40, &19, &4E, &23, &46, &21
   DEFB &00, &40, &B7, &ED, &42, &DA, &70, &40, &21, &FE, &FF
   DEFB &ED, &5B, &71, &40, &19, &E5, &21, &FE, &FF, &ED, &5B
   DEFB &71, &40, &19, &5E, &23, &56, &EB, &23, &44, &4D, &E1
   DEFB &71, &23, &70, &21, &FE, &FF, &ED, &5B, &71, &40, &19
   DEFB &5E, &23, &56, &EB, &36, &81, &21, &FC, &FF, &ED, &5B
   DEFB &71, &40, &19, &5E, &23, &56, &13, &72, &2B, &73, &C3
   DEFB &20, &40, &C9, &00, &00, &2A, &71, &40, &E5, &ED, &73
   DEFB &71, &40, &21, &FC, &FF, &39, &F9, &CD, &04, &40, &2A
   DEFB &71, &40, &F9, &E1, &22, &71, &40, &C9
----------------------------------

Die ich dann hier einbringen möchte:
---------------------------------------------
.rsxscr4
   
   call &b906
   push af      ;enable lower rom
   ............................>>> transportroutine nach &4000
   pop af
   call &b90c   ;restore lower rom state
-------------------------------------------------
Ich begreife das nicht mit der Adresse der Daten und wie eine transportroutine dafür aussieht.

Danke.
Gruss
« Letzte Änderung: 30. November 2018, 14:42:32 von cpcman »

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #21 am: 30. November 2018, 16:19:07 »
Danke.
Habe die Routine gefunden bei dir im Code womit man den Datentransfer durchführen kann  von meinem Daten.

Ist es bei den ROMS üblich das Teile in den Bereich vom RAM Kopiert werden ?

Was ist der übliche RAM-Bereich dafür? &8000-&BFFF ?
Den Bereich &4000 - &7fff kann man ja nutzen für Grafik und dem erweiterten RAM zum einblenden.

Gruss
« Letzte Änderung: 30. November 2018, 16:23:45 von cpcman »

Online TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3288
  • Liked: 780
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 29.12.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 21.01.2021)

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #23 am: 30. November 2018, 16:58:58 »
Danke für die Info.

Wie sieht bitte der ASM-Befel aus für "memory &8000" ?

Ich muss für meinen 2. Screen (4000 - 7fff)davon gebrauch machen , bevor das Programm gestartet wird vom ROM.

Danke.
Gruss

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #24 am: 30. November 2018, 17:01:38 »
Was macht bei dir bitte der Befehlssatz:
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

Danke.
Gruss

Offline Devilmarkus

  • Administrator
  • CPC 464+
  • *****
  • Beiträge: 1113
  • Liked: 367
  • Karma: +39/-0
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #25 am: 30. November 2018, 17:52:09 »
Danke für die Info.

Wie sieht bitte der ASM-Befel aus für "memory &8000" ?

Ich muss für meinen 2. Screen (4000 - 7fff)davon gebrauch machen , bevor das Programm gestartet wird vom ROM.

Danke.
Gruss

Gar nicht....
Das gibt man im BASIC ein...
Maschinencode führt das aber eh auch ohne MEMORY &xxxx aus, weils dem Code Wumpe ist...
Du musst dann eben nur drauf achten, dass ein mögliches BASIC Programm dazu das MEMORY &3fff enthält...
http://cpcwiki.de
Dein Deutsches CPCWiki!

Offline Devilmarkus

  • Administrator
  • CPC 464+
  • *****
  • Beiträge: 1113
  • Liked: 367
  • Karma: +39/-0
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #26 am: 30. November 2018, 17:53:12 »
Was macht bei dir bitte der Befehlssatz:
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

Danke.
Gruss


Festlegen der RAM-Bank, in die kopiert werden soll, dann von C000 nach 4000 in die RAM Bank kopieren...
http://cpcwiki.de
Dein Deutsches CPCWiki!

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #27 am: 30. November 2018, 19:19:13 »
Ich starte kein Basicprogramm sondern gehe gleich in die ASM-Routine mit einem Call.

Gruss

Offline cpcman

  • CPC 664
  • ***
  • Beiträge: 184
  • Liked: 11
  • Karma: +5/-2
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #28 am: 01. Dezember 2018, 10:51:54 »
Wie müsse die ROMS beschaffen sein damit die auch über dem AMSDOS ab  08 laufen?

Bei meinem MIST-FPGA-Core muss ich meine selbst erstellten unter dem AMSDOS packen also bei 06 und tiefer.

Packe ich aber die 5 SYM-ROM bei 8-12 rein, funktioniert das SYMBOS auf dem MIST-FPGA.

Gruss

Online TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3288
  • Liked: 780
  • Karma: +39/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Ein ROM erstellen "hallo welt" ?
« Antwort #29 am: 02. Dezember 2018, 00:59:36 »
Ich starte kein Basicprogramm sondern gehe gleich in die ASM-Routine mit einem Call.

Gruss

Und den CALL machst Du von BASIC aus.
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 29.12.2020)
http://futureos.cpcwiki.de/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 21.01.2021)