HC2000 salt din CP/M la BASIC

48 views
Skip to first unread message

George Chirtoacă

unread,
Feb 21, 2022, 3:27:29 AM2/21/22
to RomanianHomeComputer
Salut,

A aparut o idee pe grup pentru Cobra, incarcator de snapshot-uri, lansat din CP/M.
Am studiat putin ceva similar pentru HC2000, si pare ca nu se poate. 
Primul pas a fost sa incerc sa schimb configuratia masinii din CP/M in BASIC, dintr-un program COM, si sa afisez ceva pe ecran.
Ei bine, conform rutinelor din ROM, la lansare CP/M, se dezactiveaza portul de configuratie $7E, deci nu se mai poate altera configuratia ulterior.
Din ROM BASIC se executa codul de mai jos, care copiaza ultimele 3 instructiuni la adresa $8000 si le executa de acolo. Acele 3 instructiuni pagineaza ROM-ul CP/M la adresa 0 (in varianta de ROM v1).
386E F3           DI
386F 217D38       LD HL,387D
3872 110080       LD DE,8000
3875 010700       LD BC,0007
3878 EDB0         LDIR
387A C30080       JP 8000
387D 3E01         LD A,01
387F D37E         OUT (7E),A
3881 C30000       JP 0000,START

Din ROM-ul CP/M se executa codul de mai jos, care se copiaza la adresa $8000 si configureaza masina pentru CP/M, dar dezactiveaza portul $7E.  Daca ar fi fost LD A, $0B, ar fi mers povestea. Am modificat ROM-ul folosit in emulator si pare sa mearga.

0010 211E00       LD HL,001E
0013 110080       LD DE,8000
0016 015F00       LD BC,005F
0019 EDB0         LDIR
001B C30080       JP 8000
001E 310080       LD SP,8000
0021 3E0F         LD A,0F
0023 D37E         OUT (7E),A

A reusit cineva scenariul asta?
Altfel, din BASIC, cred ca e posibil sa se incarca snapshot-uri de emulator (Z80, SNA) si ar fi interesant de facut. Dar spercam ca e posibil si din CP/M pentru ca putem trasnfera acum fisiere de pe PC pe dischete HC in format CP/M (nu si BASIC) folosind floppy pe USB, deci era un mod de a transfera jocuri de BASIC, impachetate in fisiere COM.

HC2000_PORT_7E.png

Mircea Teletin

unread,
Feb 21, 2022, 5:42:23 AM2/21/22
to romanianho...@googlegroups.com
Ai putea face altceva dar necesita patch de cod... lasi pagina video expusa dupa incarcare, doar ca adresele difera si la video si la cod.

--
Ați primit acest mesaj deoarece sunteți abonat(ă) la grupul „RomanianHomeComputer” din Grupuri Google.
Pentru a vă dezabona de la acest grup și pentru a nu mai primi e-mailuri de la acesta, trimiteți un e-mail la adresa romanianhomecomp...@googlegroups.com.
Pentru a vizualiza această discuție pe web, accesați https://groups.google.com/d/msgid/romanianhomecomputer/875009e1-4bc7-40c4-a46c-aa6c92204afbn%40googlegroups.com.

George Chirtoaca

unread,
Feb 22, 2022, 7:15:13 AM2/22/22
to romanianho...@googlegroups.com
Salut,

Am facut ceva ca sa mearga, fara modificare de ROM sau joc, dar nu e practic, e doar de concept. Merge doar pe ROM v1, pentru ca ROM v2 se incarca initial la adresa $E000 in loc de 0 si are nevoie de alt loader. Am testat cu emulatorul Fuse, pentru ca HC-ul meu are ROM v2.
Am imitat loader-ul de CP/M, care copiaza din ROM CP/M in RAM $5F bytes la adresa $8000, si am patch-uit in RAM instructiunea LD A, $0F cu LD A, $0B. Am pus codul intr-un loader BASIC de mai jos.
Apoi jocul BOMBER MAN ruleaza OK din CP/M din fisier COM. Am ales BOMBERMAN pentru ca e mic (sub 8KB), si nu trebuie mutat, se poate pune direct la adresa de executie, $8000. Un joc mai lung ar avea nevoie de ultimii 8K RAM, unde in CP/M e map-at ROM-ul. Deci jocul trebuie sa incapa intre adresele $4000 (mai jos vine ROM BASIC dupa switch catre BASIC) si $E000 (mai sus vine ROM CP/M inainte de switch catre BASIC).
In fisierul COM, inainte de a reda controlul jocului, 
- se seteaza paginarea RAM-ului pentru BASIC in loc de CP/M:
ld  a, $EE
out ($C5), a
- se seteaza configuratia BASIC (ROM BASIC la adresa 0, video RAM la adresa $4000)
ld  a, 0
out ($7E), a

    1 CLEAR 25000
    3 LET c$="3E01D37E211E00110080015F00EDB0210480360BC30080"
    5 LET a=25000
    7 DEF FN h(c$)=16*(CODE c$(1)-48-7*(c$(1)>"9"))+CODE c$(2)-48-7*(c$(2)>"9")
   10 FOR i=0 TO LEN c$/2-1
   20 LET b=FN h(c$(i*2+1 TO i*2+2))
   25 POKE a+i,b
   30 NEXT i
   40 RANDOMIZE USR a

image.png

bomber.com.bin

Mircea Teletin

unread,
Feb 22, 2022, 11:02:49 AM2/22/22
to romanianho...@googlegroups.com
Fain ca si concept si incurajator. Fain ar fi daca am putea reloca codul + muta base-address-ul la video cu ala din CP/M, incarci COM, expui pagina video si dai drumul... doar ca daca jocul face tot felul de smecherii cu adresele si isi genereaza date dinamic prin RAM sau face calcule de adrese... mai complicat de identificat tot ce trebuie patch-uit.

Reply all
Reply to author
Forward
0 new messages