Sida 9 av 10
Re: Nya RT-datorn
Postat: 30 april 2024, 15:28:54
av Mickecarlsson
Här är det otestade programmet för att läsa ner data från EPROM till RAM och starta programmet. Det kompilerar som det ska, återstår och se om det funkar
EDIT: Fixade en bugg, glömde uppdatera vilket EPROM som skulle läsas.
Kod: Markera allt
NAM PROM
*
*
* PROGRAMMET L[SER NED PROMBASERADE PROGRAM
* TILL RAM
*
* F\RUTS[TTER PROM P] KORT 836
* H[R ANV[NDS F\LJANDE:
* PROMKORT P] ADRESS $E0B0
* RAM P] ADRESS $E400-E4FF
*
* PROGRAMMET I PROM SKALL HA F\LJANDE UTFORMN.:
* BYTE 1 OCH 2 = SISTA PROMADRESS - T.EX. 02AE
* BYTE 3 OCH 4 = F\RSTA RAMADRESS - T.EX. C100
* BYTE 5 OCH 6 = TRANSFERADRESS - T.EX. C100
*
* MODIFIERAT F\R MICKES PROMKORT 836
* AV MICKE 2024-04-30
*
* PROGRAMMET SKRIVET AV GUNNAR EJEMOH
*
* KALLA UPP PROGRAMMET MED GET.PROM
*
*
EPROM EQU $E0B0
COMTAB EQU $E400
JMPTAB EQU $E500
LADDA EQU $E600
RAM EQU JMPTAB+$F0
WARMS EQU $CD03
PROMVAL EQU 2
*
ORG RAM
PRMSTA RMB 2 1:A PROMADRESS
PRMSTO RMB 2 SISTA PROMADRESS
RAMSTA RMB 2 1:A RAMADRESS
TRNSFR RMB 2 TRANSFERADRESS
ENDADR RMB 2
*
* L[GG IN ADRESS TILL KOMMANDOTABELL I FLEX
*
ORG $CC12
FCB $E4 TABELL I RAM P] $E400
*
ORG COMTAB
* H[R SKRIVS ALLA KOMMANDON IN SOM LIGGER I PROM
* EFTER SISTA KOMMANDOT SKRIVS 0
*
FCC 'ASN'
FCB 0
FDB JMPTAB
FCC 'COPY'
FCB 0
FDB COPY
FCC 'DATE'
FCB 0
FDB DATE
FCC 'CAT'
FCB 0
FDB CAT
FCC 'DELETE'
FCB 0
FDB DELETE
FCB 0
*
ORG JMPTAB
* H[R FINNS STARTADR. TILL ALLA PROGRAM I PROM
* X SKA INNEH]LLA STARTADRESSEN F\R PROGRAMMET
* B SKA INNEH]LLA 1, 2 ELLR 3 = VILKET EPROM
* LIGGER PROGRAMMET P]
*
PSHS X,Y,A,B SPARA UNDAN REGISTER
LDX #$0000 F\RSTA PROMADRESSEN
LDB 1 F\RSTA PROMET
STORE STX PRMSTA L[GG I PRMSTA
JMP LADDA HOPPA
*
COPY PSHS X,Y,A,B
LDX #$54E0
LDB 2 ANDRA PROMET
BRA STORE
*
DATE PSHS X,Y,A,B
LDX #$62C0
LDB 1
BRA STORE
*
CAT PSHS X,Y,A,B
LDX #$68CA
LDB 1
BRA STORE
*
DELETE PSHS X,Y,A,B
LDX #$0000
LDB 3 TREDJE PROMMET
BRA STORE
*
*
ORG LADDA
* H[R L[SER VI IN
* STOPPADRESS
* RAMADRESS
* TRANSFERADRESS
*
LDY #PRMSTO
LDX PRMSTA STARTADRESSEN I EPROM
LADDA2 BSR LESPRM L[S FR]N EPROM BYTE 1
BSR LESPRM L[S FR]N EPROM BYTE 2
CMPY #ENDADR [R VI KLARA?
BNE LADDA2 NOPE, LOOPA
*
* H[R L[SES SJ[LVA PROGRAMMET IN
*
LDX PRMSTO STOPPPADRESSEN
INX \KA X
STX ENDADR LAGRA I ENDADR
LDX PRMSTA L[GG PRMSTA I X
LDY RAMSTA VART I MINNET SKA DET TILL
LEAX 6,X HOPPA FRAM 6 POS F\RBI STARTINFO
STX PRMSTA L[GG I PRMSTA = SJ[LVA PROGGET
LADDA3 BSR LESPRM L[S IN EN BYTE
CMPX ENDADR [R VI KLARA?
BNE LADDA3 NOPE, LOOPA IGEN
PULS X,Y,A,B ]TERST[LL REGISTER
JMP [TRNSFR] OCH HOPPA TILL STARTADRESSEN
*
* H[R L[SER VI IN DATA FR]N EPROM
*
LESPRM CMPB PROMVAL VILKET EPROM SKA ANV[NDAS
BMI PROM1 MINDRE [N 2 = PROM #1
BEQ PROM2 LIKA MED 2 = PROM #2
BGT PROM3 ST\RRE [N 2 = PROM #3
*
PROM1 STX EPROM F\RSTA EPROMET
LDA EPROM L[S DATA
BRA LAGRA LAGRA I RAM
PROM2 STX EPROM+$10 ANDRA EPROMET
LDA EPROM+$10 L[S DATA
BRA LAGRA LAGRA I RAM
PROM3 STX EPROM+$20 TREDJE EPROMET
LDA EPROM+$20 L[S DATA
BRA LAGRA LAGRA I RAM
*
LAGRA STA ,Y+ SPARA TILL MINNET, ÖKA MED 1
INX N[STA POSITION
RTS ]TERG]
*
END
Re: Nya RT-datorn
Postat: 1 maj 2024, 12:12:52
av Mickecarlsson
Idag fick jag hjälp med att radera en mängd EPROM (TACK anders_bzn).
Glad i hågen kom jag hem och satte mig att ladda in FLEX.SYS till PROM-programmeraren, enligt CBUG 4.3 laddas FLEX från EPROM via adress $E0B0 och position $0C00 - $1FFF, dvs 5 120 bytes.
Vilket det kanske gjorde en gång i tiden men FLEX 9.1 som jag kör är lite större, nämligen 6 552 bytes.
Jag får patcha CBUG 4.3 till att ladda mellan $0C00 - $2598, men för att vara "framtidssäker" väljer jag att sätta sista position till $25FF.
Jag återkommer.....
Re: Nya RT-datorn
Postat: 1 maj 2024, 22:54:27
av Mickecarlsson
Och nu när hjärnan har aktiverats så stämmer CBUG
FLEX laddas mellan CC00-DFFF, dvs, från EPROM 0C00-1FFF, men man måste strippa FLEX från alla startpunkter.
En FLEX-fil börjar alltid med:
Byte 0 - Start of record indicator $02
Byte 1 - Most significant byte of the load address
Byte 2 - Least significant byte of the load address
Byte 3 - Number of bytes in the record
Byte 4-n - The binary data of the record.
I slutet av filen står det HEX 16 följt av två bytes som innehåller start-adressen för programmet.
För att ha FLEX i EPROM måste man strippa 4 bytes i början och 3 bytes i slutet samt spara det på rätt ställe i EPROM'et.
Jag har listat FLEX.SYS alla minnesblock, och det är ett antal, mer info kommer:
Kod: Markera allt
Converting 0000 to FFFF
Address: CC00-CC34 Length: 053
Address: CC49-CC49 Length: 001
Address: CC4E-CCA7 Length: 090
Address: CCC0-CCC0 Length: 001
Address: CCD8-CCD8 Length: 001
Address: CCE4-CCE4 Length: 001
Address: CCF8-CDBB Length: 196
Address: CDBC-CE7F Length: 196
Address: CE80-CF43 Length: 196
Address: CF44-D007 Length: 196
Address: D008-D0CB Length: 196
Address: D0CC-D18F Length: 196
Address: D190-D253 Length: 196
Address: D254-D317 Length: 196
Address: D318-D36A Length: 083
Address: D3FD-D3FF Length: 003
Address: CA00-CAC3 Length: 196
Address: CAC4-CAE1 Length: 030
Address: C840-C84F Length: 016
Address: C700-C7C3 Length: 196
Address: C7C4-C802 Length: 063
Address: BF00-BF71 Length: 114
Address: D400-D408 Length: 009
Address: D435-D4F8 Length: 196
Address: D4F9-D5BC Length: 196
Address: D5BD-D680 Length: 196
Address: D681-D744 Length: 196
Address: D745-D808 Length: 196
Address: D809-D8CC Length: 196
Address: D8CD-D990 Length: 196
Address: D991-DA54 Length: 196
Address: DA55-DB18 Length: 196
Address: DB19-DBDC Length: 196
Address: DBDD-DCA0 Length: 196
Address: DCA1-DD64 Length: 196
Address: DD65-DDE2 Length: 126
Address: D3E5-D3FC Length: 024
Address: D370-D3B9 Length: 074
Address: CB00-CBC3 Length: 196
Address: CBC4-CBD5 Length: 018
Address: DE00-DEC3 Length: 196
Address: DEC4-DF87 Length: 196
Address: DF88-DFB8 Length: 049
Re: Nya RT-datorn
Postat: 2 maj 2024, 21:10:34
av Mickecarlsson
836-kortet fungerar perfekt, åtminstone med 1 EPROM, jag har inte testat med 2 eller 3. Och PROM-kommandot fungerar helt perfekt,
Men.....
Jag goofade mig vad det gäller lagringen av programmet i EPROM. Man måste strippa de 4 första byten i varje program innan de lagras i EPROM. De 4 första byten är till för FLEX så den vet var i minnet programmet ska starta. Det är inga problem att kalla upp t.ex. ASN från floppy, FLEX tittar på det första 4 byten och stuvar in programmet på startadressen, i detta fall $C100
Laddar jag från EPROM så kan jag välja att göra två saker, antingen strippa de första 4 byten innan jag lagrar programmet i EPROM eller så löser jag det i programmet PROM.
Tack vare siten
Daniel's bits, bytes & pieces kan jag lösa detta med hjälp av hans program cmd2bin som strippar alla dessa bytes från FLEX-filer.
Och för ASN ser jag att den innehåller 2 referenser:
Kod: Markera allt
cmd2bin ASN.CMD ASN.BIN
Converting 0000 to FFFF
Address: C100-C1C3 Length: 196
Address: C1C4-C1EA Length: 039
Kollar jag in koden ser jag att andra referensen är texten som ska visas, jag gissar att man har direktivet
för texterna, då blir det 4 bytes där som måste strippas.
Jag får nu gå igenom alla programmen jag ska ha i EPROM för att se om det går att lösa.
Jag strippade FLEX och la in på arean 0C00-1FFF, men det ballar ur, FLEX hämtas via kommandot L, och det står rätt i den arean som kollas men koden löper amok
Felsökning pågår på detta.
Re: Nya RT-datorn
Postat: 3 maj 2024, 09:57:30
av Mickecarlsson
Bläh. Jag står vid ett vägskäl. Den FLEX 9.1 jag använder är en patchad variant som har en bra drivrutin för WD2797, klarar 80 spår, double density och double sided.
MEN…..
För att få plats med drivrutinen fick man utnyttja en del av det vanliga minne, därav patchen i FLEX.
Ett av minnesblocken i FLEX är detta:
Här liggen en del av drivrutinen för WD2797, och denna del kan jag inte få med mig i CBUG’ens laddrutin för FLEX, den laddar till CC00-DFFF.
Jag kan göra på två sätt:
Antingen patcha CBUG att ladda CC00-DFFF som vanligt + de 114 byten i BF00-BF71.
Eller leta upp den FLEX som heter FLEX 9.81 DOUBLE DENSITY, den vet jag att jag körde på min RT-dator på 80-talet.
Re: Nya RT-datorn
Postat: 3 maj 2024, 19:35:18
av Mickecarlsson
Efter två härliga dagar med barnbarnet var det dags att titta på att fixa till koden för EPROM-kortet. Och jag tänkte om. Jag har allt som behövs i CMD-filen, där är var i minnet programmet ska lagras, hur stort blocket är som ska läggas i minnet, och transferadressen. Om programmet är större än 255 bytes är där fler lagringspositioner.
Det enda som behövs är den adress på EPROM-kortet där programmet startar, första programmet börjar på $0000. Inga Sista Promadress, Första RAM-adress eller Transferadress behövs.
START:
Jag läser helt enkelt in första byten
kollar om det är $02
om det är så, då läser jag in två bytes till, vilket då blir min RAM-adress där programmet ska lagras.
Sen läser jag in en byte till = hur många bytes det finns i blocket.
Loppa och läs in dessa bytes och lägg i minnet till blocket är läst in.
Kolla om nästa byte är $02 eller $16
$02 gå till START
$16 läs in två bytes till TRANSFERADRESS och hoppa dit.
Mer kommer
EDIT: Korrigerade fel.
Re: Nya RT-datorn
Postat: 4 maj 2024, 19:33:59
av Mickecarlsson
Då var det (nästan) klart.
Programmet fungerar med ett EPROM 27512 som sitter i sockeln för IC8
Första programmet som ska läggas i EPROM läses in på adress $0000, nästa program ska laddas in på adressen som är efter de tre bytes som avslutar första programmet, för det flesta utilities är det 0x16, 0xC1, 0x00.
Varje startadress i EPROM ska läggas in i tabellen tillsammans med kommandot som anropar programmet.
Koden är här, kommer att läggas upp på Github.
OBS, detta är bara exempelkod med tre program, jag kommer att fylla 27512'an fullt ut och lägga upp min .ASM- och .BIN-fil på Github
Kod: Markera allt
NAM PROM
*
* PROGRAMMET L[SER NED PROMBASERADE CMD-FILER
* TILL RAM
* SKRIVET AV MIKAEL KARLSSON 2024-05-04
*
* BASERAT P] PROM.ASM UR MPU-LAREN
* NR 2 1983, SKRIVET AV GUNNAR EJEMOH
*
* F\RUTS[TTER PROM P] KORT 836
* EPROM P] $E0B0, $E0C0 och $E0D0
* RAM P] ADRESS $E400-E4FF
*
* PROGRAMMET I PROM [R STANDARD CMD-FILER
*
* KALLA UPP PROGRAMMET MED GET.PROM
*
EPROM EQU $E0B0 EPROM 27512 I IC8
COMTAB EQU $E400 COMMAND-TABELLEN
JMPTAB EQU $E500 HOPP-TABELLEN
LADDA EQU $E700 SJ[LVA PROGRAMMET
RAM EQU JMPTAB+$F0
WARMS EQU $CD03 FLEX VARMSTART
*
ORG RAM
PRMSTA RMB 2 CMD-FILENS STARTDARESS I EPROMET
RAMSTO RMB 2 VART I RAM DET SKA SPARAS
TRNSFR RMB 2 TRANSFERADRESS
PROMVAL RMB 1 VILKET EPROM, 1, 2 ELLER 3?
*
* L[GG IN ADRESS TILL KOMMANDOTABELL I FLEX
*
ORG $CC12 FLEX USER COMMAND TABLE ADDRESS
FCB $E4 TABELL I RAM P] $E400
*
ORG COMTAB
* H[R SKRIVS ALLA KOMMANDON IN SOM LIGGER I PROM
* EFTER SISTA KOMMANDOT SKRIVS 0
*
FCC 'ASN'
FCB 0
FDB JMPTAB
FCC 'DATE'
FCB 0
FDB DATE
FCC 'DIR'
FCB 0
FDB DIR
FCB 0
*
ORG JMPTAB
*
* H[R FINNS STARTADR. TILL ALLA PROGRAM I PROM
* X SKA INNEH]LLA STARTADRESSEN F\R PROGRAMMET
*
PSHS X,Y,A,B SPARA UNDAN REGISTER
LDX #$0000 F\RSTA PROGRAMMET STARTADRESS
STORE STX PRMSTA L[GG I PRMSTA
JMP LADDA HOPPA
*
DATE PSHS X,Y,A,B
LDX #$00F6
BRA STORE
*
DIR PSHS X,Y,A,B
LDX #$020A
BRA STORE
*
ORG LADDA
*
LOAD1 LDX PRMSTA STARTADRESSEN I EPROM
*
LOAD2 BSR LESPRM H[MTA 1 BYTE, L[GG I A
CMPA #2 [R DET 02? DVS. START OF RECORD?
BEQ LESREC JA; L[S D] IN RECORDL[NGD OCH LAGRA DET I MINNET
CMPA #$16 [R DET TRANSFER ADRESS?
BSR LESPRM H[MTA TRANSFER-ADRESSEN MSB
STA TRNSFR SPARA MSB
BSR LESPRM H[MTA TRANSFER-ADRESSEN LSB
STA TRNSFR+1 SPARA LSB
PULS X,Y,A,B ]TERST[LL REGISTER
JMP [TRNSFR] OCH HOPPA TILL STARTADRESSEN
* LOAD FLEX FILE RECORD
LESREC BSR LESPRM H[MTA RAM-ADRESSEN MSB
TFR A,B LAGRA I B
BSR LESPRM H[MTA RAM-ADRESSEN LSB
EXG A,B V[ND P] DET S] DET BLIR R[TT
STD RAMSTO SPARA I RAMSTO
BSR LESPRM H[MTA ANTAL BYTES I RECORD
TFR A,B LAGRA DET I B
LESRCD2 BSR LESPRM H[MTA EN BYTE FR]N PROGRAMMET
LDY RAMSTO VAR SKA DET SPARAS?
STA 0,Y+ SPARA DET I MINNET, \KA
STY RAMSTO SPARA N[STA ADRESS
DECB [R VI NERE P] 0?
BNE LESRCD2 NEJ; FORTS[TT TILLS VI [R DET.
BRA LOAD2 JA, LETA EFTER FLER RECORDS
*
LESPRM STX EPROM F\RSTA EPROMET
LDA EPROM L[S DATA*
INX N[STA POS I PROMMET
RTS ]TERG]
*
END
EDIT: Rättade felaktighet
Re: Nya RT-datorn
Postat: 5 maj 2024, 01:23:02
av MiaM
Sidospår: Antar att det är bäst att göra som du verkar ha gjort, d.v.s. ett eget "ROM-filsystem". Men ett annat alternativ är ju att emulera en disk med ROM och låta filsystemkoden i Flex hantera alla detaljer. Det lär väl slösa på utrymme en del, men å andra sidan skulle det gå att köra EEPROM och göra disken skrivbar. Typisk grej "ingen" skulle gjort då det begav sig (oj vad EEPROM var dyra...) men fullt rimligt idag.
Re: Nya RT-datorn
Postat: 5 maj 2024, 08:44:14
av Mickecarlsson
Jag har funderat på det, men det innebär att jag var tvungen att skriva en disk-drivrutin.
I MPU-laren #1 1985 finns det en beskrivning, kod och schema på just en ROM-disk.
Men, den koden ersätter hela drivrutinen till att bara funka med det ROM-kortet, vilket iofs är OK om du bara ska använda datorn till en styrning av något och inte vill fibbla med disketter i en taskig miljö.
Jag har sett kod för FLEX som kollar vilken drive som accessas, är det t.ex. drive 3 så hoppar man till en annan drivrutin för just drive 3. Nackdelen är att där finns inte så mycket plats i FLEX-arean att det går att få in, då får man trixa, som det är gjort med den FLEX 9.1 jag brottas med, där har man lagt delar av drivrutinen i user RAM.
Som det funkar nu är jag mer än nöjd, jag slipper mecka med CMD-filerna, det enda jag gör är att lägga ett nytt program i EPROM direkt de tre avslutande byten, dvs, 0x16, 0xC1, 0x00 (om programmet startar på $C100). CMD-filerna är paddade för att fylla ut en sektor (gissar jag, har inte orkat kolla).
Det jag ska göra nu är att få till EPROM #2 och #3 i koden.
Re: Nya RT-datorn
Postat: 6 maj 2024, 16:49:05
av Mickecarlsson
La in de flesta FLEX-programmen i EPROM, inklusive de stora, LIST, ASMB och XBASIC.
Det fungerar så bra att man blir tårögd
Tyvärr ser det mörkt ut med att ladda FLEX från EPROM med den inbyggda rutinen. FLEX 9.1 har exekverbar kod i dessa areor som måste finnas med:
C700-C802
C840-C84F
CA00-CAE1
CB00-CBD5
Laddrutinen i CBUG börjar med att rensa minnet mellan C700-CBFF för att sen ladda FLEX från EPROM 0C00-1FFF till CC00-DFFF i RAM, koden är här:
Kod: Markera allt
LDFLEX EQU *
LDX #$C700
LDFL10 CLR 0,X+
CMPX #$CC00 KLART ?
BNE LDFL10
LDX #$0C00 START I EPROM
LDU #$CC00 START I RAM
FLY100 STX EPROM0
LEAX 1,X
LDA EPROM0
STA 0,U+
CMPX #$1FFF
BNE FLY100
LDX #$7ECD KOLLA OM DET FINNS N]'T
CMPX $CD00
BNE JMPRTS
JMP $CD00
Jag får patcha denna kod och flytta den till F4C0-F7FF där det är plats över att lägga den. Jag lägger in koden från PROM.ASM och lägger in hela FLEX.SYS i EPROM så slipper jag böka. Och jag kan då lägga FLEX.SYS i början på EPROM'et och sen fylla på med de andra programmen.
Återkommer......
Re: Nya RT-datorn
Postat: 7 maj 2024, 08:53:25
av Mickecarlsson
Jag ger upp FLEX-laddnungen via EPROM så länge. Jag får undersöka det senare. Det som ska testas nu är att ladda från EPROM #2 och #3.
Re: Nya RT-datorn
Postat: 7 maj 2024, 09:05:06
av ELTompa
Nyfiken fråga, hur gick det med tvn som inte visade alla rader? Fick du fart på monitorn?
Re: Nya RT-datorn
Postat: 7 maj 2024, 12:51:03
av Mickecarlsson
Nej, jag kör fortfarande med den TV som bara visar 23 rader
Monitorn har jag inte haft tid att byta elyterna på.
Re: Nya RT-datorn
Postat: 7 maj 2024, 13:48:29
av Mickecarlsson
Då fungerar koden till mitt EPROM-kort 836 med flera EPROM.
Kommandor GET PROM1 laddar min kod till minnet på E400 och uppåt och lägger in pekare till tabellen med kommadona som är ”minnesresidenta”.
Här assemblerar jag koden, laddar den med GET och testar två kommandon som ligger på första positionen på var sitt ERPOM.
ASN är kommandot för att styra var abretsdisk och systemdisk finns. Jag ska ändra min WORK DRIVE till 1.
DEBUG är en komplett debugger för FLEX, den lär emulera en 6809’a fullt ut (enligt manualen)
Koden PROM.ASM laddas upp på Guthub inom kort.
IMG_5028.jpeg
Re: Nya RT-datorn
Postat: 8 maj 2024, 18:56:59
av Mickecarlsson
Trägen vinner
Efter att ha kollat i FLEX.SYS upptäckte jag att det fanns delar där som var paddade med 0x00 och dessa bytes var mellan minnesblocken. Då ballade min kod ur då jag inte tog hänsyn till detta.
Fixades med BNE LOAD2.
Nu funkar det riktigt bra
Bildbevis nedan, jag trycker x för att köra min laddrutin i CBUG, och FLEX bottade blixtsnabbt
Kod: Markera allt
LOAD2 BSR LESPRM H[MTA 1 BYTE, L[GG I A
CMPA #2 [R DET 02? DVS. START OF RECORD?
BEQ LESREC JA; L[S D] IN RECORDL[NGD OCH LAGRA DET I MINNET
CMPA #$16 [R DET TRANSFER ADRESS?
BNE LOAD2 HOPPA ÖVER OM DET ÄR PADDNING
BSR LESPRM H[MTA TRANSFER-ADRESSEN MSB
STA TRNSFR SPARA MSB
BSR LESPRM H[MTA TRANSFER-ADRESSEN LSB
STA TRNSFR+1 SPARA LSB
PULS X,Y,A,B ]TERST[LL REGISTER
JMP [TRNSFR] OCH HOPPA TILL STARTADRESSEN