Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav MOB-i-L » 5 april 2021, 20:14

Jag undrar om det är möjligt att göra samma sak som kommandot POP i Applesoft BASIC gör, men på C64 och VIC20. Applesoft BASIC var inbyggt i Apple II.

POP är som RETURN förutom att det inte återvänder, d.v.s. hoppar tillbaka. POP poppar returstacken för BASIC-radnummer, d.v.s. konverterar senaste GOSUB till GOTO.

Kanske POP kan ersättas med hjälp av PEEK, POKE, eller SYS, och då skulle fler gamla Applesoft BASIC program kunna konverteras till att köra på C64 eller VIC20. Jag hittade två program som använder POP:
https://github.com/inexorabletash/jsbas ... uclear.txt
https://github.com/inexorabletash/jsbas ... pacman.txt

Applesoft BASIC referenser:
https://www.calormen.com/jsbasic/reference.html
https://www.landsnail.com/a2ref.htm
MOB-i-L
Lärling
Lärling
 
Inlägg: 43
Blev medlem: 2 maj 2010, 10:05

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav bjonte » 6 april 2021, 06:36

MOB-i-L skrev:Jag undrar om det är möjligt att göra samma sak som kommandot POP i Applesoft BASIC gör, men på C64 och VIC20. Applesoft BASIC var inbyggt i Apple II.

Jag tror inte att det går att lösa med bara POKE tyvärr, men det går att lösa med en snutt maskinkod.

vice-screen-20210406073519.png
Ett exempel
vice-screen-20210406073519.png (3.53 KiB) Visad 181 gånger


Samma program funkar på Vic20 med.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2038
Blev medlem: 17 april 2006, 23:12

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav MOB-i-L » 8 april 2021, 00:48

Tackar! Det fungerar här också i C64 (x64sc) och VIC20 (xvic) från VICE. Har du utvecklat maskinkoden själv?
MOB-i-L
Lärling
Lärling
 
Inlägg: 43
Blev medlem: 2 maj 2010, 10:05

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav bjonte » 8 april 2021, 05:16

MOB-i-L skrev:Har du utvecklat maskinkoden själv?


Ja, det har jag. Jag läste om hur GOSUB funkade i Mapping the C64 och Mapping the VIC. Det står inget om det i C128-varianten så det är oklart om det går att köra samma kod där.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2038
Blev medlem: 17 april 2006, 23:12

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav MOB-i-L » 8 april 2021, 17:12

Fascinerande! Varför måste det vara maskinkod? Går det inte lika bra att göra samma sak som maskinkodsrutinen med bara PEEK och POKE? Jag kan i och för sig tänka mig att det blir mer komplicerat att ta bort ett returradnummer om det blir ett extra p.g.a. att man skulle ha PEEK:arna och POKE:arna i en BASIC-subrutin. Kanske blir det ännu värre med BASIC om även beräkningarna påverkar stacken för RETURN.

Jag provade programmet i emulatorn för Commander X16 (x16emu), men det fungerade inte där utan den hängde sig med flimrande bild. CX16 har samma BASIC v2 som C64 och VIC20, men med några extra kommandon och funktioner.
Senast redigerad av MOB-i-L 8 april 2021, 17:26, redigerad totalt 1 gång.
MOB-i-L
Lärling
Lärling
 
Inlägg: 43
Blev medlem: 2 maj 2010, 10:05

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav bjonte » 8 april 2021, 17:17

MOB-i-L skrev:Fascinerande! Varför måste det vara maskinkod? Går det inte lika bra att göra samma sak som maskinkodsrutinen med bara PEEK och POKE?


Det behöver vara det för att det flyttar på stackpekaren i processorn. Jag vet inget sätt att göra det från BASIC.

MOB-i-L skrev:Jag provade programmet i emulatorn för Commander X16 (x16emu), men det fungerade inte där utan den hängde sig med flimrande bild. CX16 har samma BASIC v2 som C64 och VIC20, men med några extra kommandon och funktioner.


Problemet kan vara att den inte har ledigt minne på samma ställe som C64 och VIC-20. Det kan förstås också vara så att den lagrar mer eller mindre i stacken eller har en separat BASIC-stack.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2038
Blev medlem: 17 april 2006, 23:12

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav MOB-i-L » 8 april 2021, 17:50

Jo, problemet är nog att minnet används till något annat, ty jag skrev ett program som enbart POKE:ade i området 679 t.o.m. 767 på C. X16, vilket ska vara ett oanvänt område i C64, enligt https://sta.c64.org/cbm64mem.html . Jag fick då samma effekt på skärmen.

Är maskinkodsrutinen för POP relokerbar, ty då kunde jag prova att POKE:a in den någon annanstans.
MOB-i-L
Lärling
Lärling
 
Inlägg: 43
Blev medlem: 2 maj 2010, 10:05

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav bjonte » 8 april 2021, 17:57

MOB-i-L skrev:Är maskinkodsrutinen för POP relokerbar, ty då kunde jag prova att POKE:a in den någon annanstans.


Ja, det är den så det är bara att flytta runt. Jag provade på C128 med adress 5000 men det funkar inte. Det måste till någon ändring i programmet.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2038
Blev medlem: 17 april 2006, 23:12

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav MOB-i-L » 8 april 2021, 20:06

Jag provade att flytta rutinen till 1700 i X16, ty 1024 t.o.m. 2047 är lediga för maskinkod i den, men det fungerade tyvärr inte, men det hängde sig inte heller, men emulatorn (x16emu r38) betedde sig konstigt efter det.

Hur som helst, det är ju bra att man nu kan porta Applesoft BASIC-program till VIC20 eller C64. En skillnad är att booleska uttryck är bitvisa (-1/0) i CBM BASIC v2, men logiska (1/0) i Applesoft BASIC för Apple II. Sedan är det skillnad på STR$() som i CBM har ett extra mellanslag för icke negativa tal. CBM BASIC är för övrigt mer lik GW-BASIC/QBASIC än Applesoft BASIC. Samtliga här nämnda BASIC:ar är ursprungligen utvecklade av Microsoft. Att Applesoft BASIC är annorlunda beror nog på att den är omhackad för att vara kompatibel med Apple Integer BASIC av Steve "Woz" Wozniak för Apple II: https://www.landsnail.com/a2ref2.htm
MOB-i-L
Lärling
Lärling
 
Inlägg: 43
Blev medlem: 2 maj 2010, 10:05

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav bjonte » 8 april 2021, 21:00

Programmerar du grejor till CX16?
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2038
Blev medlem: 17 april 2006, 23:12

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav MOB-i-L » 8 april 2021, 22:22

Jag har bara portat ett av mina BASIC program till CX16 och det är Aritm som kan köras på https://www.commanderx16.com/forum/inde ... /73-aritm/
Jag har gjort en del andra program för att testa min PETSCII till UTF8-omvandlare som även fungerar med C64:
https://github.com/mobluse/x16-petscii2utf8
https://github.com/mobluse/chargen-maker

Man kan ju betrakta x16emu som ett programutvecklingsverktyg för C64 och VIC20 om man håller sig till BASIC eller maskinkod som använder Kernal-anrop.
Fördelar jämfört med VICE:
  1. Möjligt att få utmatning till terminalfönstret man startade emulatorn ifrån.
  2. Lättare att få in program från textfiler.
  3. Kan läsa och skriva till filer i native-filsystemet (men fungerar ej för alla filtyper, ty vissa måste ha image).
De har även tagit in en del pull requests från mig i Commander X16-projektet på GitHub: https://github.com/commanderx16

Angående POP så undrar jag om man kan göra en prg-fil som lägger till kommandot POP i C64 efter att man laddat den, eller måste man göra en crt-fil?
Redigering: Jag hittade svaret på min fråga. Det räcker med en prg-fil: https://lawlessguy.wordpress.com/2014/0 ... -64-basic/
MOB-i-L
Lärling
Lärling
 
Inlägg: 43
Blev medlem: 2 maj 2010, 10:05

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav MOB-i-L » 13 april 2021, 23:05

Angående POP så finns det ett felfall som inte hanteras: Om man gör SYS700 fler gånger än det finns RETURN-radnummer i C64 så får man inte felmeddelandet "?RETURN WITHOUT GOSUB ERROR" utan skärmen raderas. I VIC20 är det värre, ty där får man ?OVERFLOW i en oändlig loop som inte går att stoppa.

Kod: Markera allt
0 fori=0to19:reada:poke700+i,a:next:data104,133,251,104,133,252,186,138,24,105
1 data7,170,154,165,252,72,165,251,72,96
10 gosub100
20 print"klar":end
100 gosub1000
110 print"inte hit!"
120 return
1000 print"nu sker det!"
1010 sys700
1015 sys700
1017 sys700
1020 return


Kan klistras in i t.ex. x64sc eller xvic (VICE).
MOB-i-L
Lärling
Lärling
 
Inlägg: 43
Blev medlem: 2 maj 2010, 10:05

Re: Kan POP från Applesoft BASIC simuleras på C64 och VIC20

Inläggav bjonte » 14 april 2021, 05:06

MOB-i-L skrev:Angående POP så finns det ett felfall som inte hanteras


Ja, och det finns fler problem. Om du kör det inne i en FOR-sats så kommer datorn att krascha. Men detta är ett minimalt hack för att lösa ditt specifika problem, inte en skeppbar produkt. Gör man rätt kan man släppa program med det här i men det är inte gjort för att vara särskilt användarvänligt, utan för att vara pyttelitet och relokerbart. En mer färdig produkt skulle ju vara ett BASIC-kommando och inte en kryptisk SYS. Med felhantering så springer detta snabbt iväg i storlek så det blir en roman av datasatser i programmet och det går inte att lagra det där det ligger och så slutar det att vara körbart med samma kod för Vic20 och C64. Det blir också mindre plats till ens BASIC-program på oexpanderad VIC20. Nu är maxstorleken oförändrad. Så det är en avvägning att göra det här mer användarvänligt.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 2038
Blev medlem: 17 april 2006, 23:12


Återgå till Programmering/prog.-verktyg

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst

Banners

BOA Japon Mediapalatset Nostalgibutiken
Quartex Retro Overlays Retroplay Spel och sånt
Super Motaro Söders Serie & Skivhandel vintagegames.se RG 2016
cron