Sys calls

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Sys calls

Inläggav Redreamer » 10 december 2018, 23:01

I mitt verktyg för att koda så skapar verktyget självt ett sys-anrop för att starta programmet.
Kod: Markera allt
*=$0801

        BYTE    $0B, $08, $0A, $00, $9E, $32, $30, $34, $39, $00, $00, $00


Men vad betyder det? Försökt söka lite efter det men inser att jag behöver ta fram min C64RG om jag ska lösa detta, men den är nog nedpackad någonstans =(
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1175
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Sys calls

Inläggav bjonte » 11 december 2018, 04:40

Redreamer skrev:
Kod: Markera allt
*=$0801

        BYTE    $0B, $08, $0A, $00, $9E, $32, $30, $34, $39, $00, $00, $00


Men vad betyder det?


Det betyder:

Kod: Markera allt
0b 08 - adressen till nästa rad $080b
0a 00 - radnumret $000a (10)
9e - token för SYS
32 30 34 39 - petscii för 2049
00 - markerar slut på rad
00 00 - adressen till nästa rad $0000, vilket markerar slut på programmet
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1538
Blev medlem: 17 april 2006, 23:12

Re: Sys calls

Inläggav bjonte » 11 december 2018, 06:13

Jag har ett macro för att bygga sys-raden dynamiskt.

Kod: Markera allt
macro basic_line(.line_number, .sys_addr)
{
   define word = .next_basic_line
   define word = .line_number
   define byte = $9e // SYS
   define byte[] = { string(.sys_addr) }
   define byte = 0 // end of line
   define word .next_basic_line = 0 // end of BASIC program
}


Där kan man se att det första ordet pekar framåt till .next_basic_line. En liten parentes är att det ju faktiskt går att ladda in ett program som är gjort på Vic20, trots att BASIC-programmet kommer att ligga på en annan plats på den och den här pekaren som pekar till nästa rad inte kommer att peka till rätt ställe längre. När man laddar in ett program på det här sättet:

Kod: Markera allt
LOAD"PRG",8


så kommer programmets startadress att ignoreras och istället laddas till $0801 som är C64-BASIC-start. Därefter kommer BASIC att springa igenom programmet och se till att alla de här pekarna som pekar på nästa rad blir rätt med avseende på den nya platsen. Om man däremot laddar programmet såhär:

Kod: Markera allt
LOAD"PRG",8,1


så kommer dels programmet att läggas där Vic-20 hade det och inga nästa-rad-pekare kommer att korrigeras.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1538
Blev medlem: 17 april 2006, 23:12

Re: Sys calls

Inläggav Redreamer » 11 december 2018, 08:49

ok. tycker det är lite klurigt att läsa ut direkt ur en byte-rad. Speciellt när man ska komunicera med kernal.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1175
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: Sys calls

Inläggav bjonte » 11 december 2018, 09:41

Nu fattar jag inte vad du menar.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1538
Blev medlem: 17 april 2006, 23:12

Re: Sys calls

Inläggav Redreamer » 11 december 2018, 11:17

Jo. alltså. Den byteraden som jag undrade över är lite klurig att koda av. För det är väll så att den koden hade inte fungerat när man sedan är inne i sin egen kod och då har tagit bort kernelfunktiomerna. Använda diverse tokens osv, det är okänd mark för mig.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1175
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: Sys calls

Inläggav bjonte » 11 december 2018, 19:38

Det känns som att vi pratar förbi varandra. :D

Det här är ju inte maskinkod utan dataformatet för att beskriva BASIC-programmets rader, som tolkas av BASIC-ROMmet.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1538
Blev medlem: 17 april 2006, 23:12

Sys calls

Inläggav bjonte » 12 december 2018, 17:41

Det enklaste sättet att få förståelse för detta är att skriva ett tvåradersprogram och kolla i en maskinkodsmonitor vad det blev på $0801, ändra lite och kolla igen.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1538
Blev medlem: 17 april 2006, 23:12

Re: Sys calls

Inläggav Redreamer » 13 december 2018, 20:42

Bra tips! Har inte hunnit kika mer på detta än. Ska göra någon simpel loader som laddar in mina Sids ovanför $d000 och sedan spelkoden på $801. Blir nog med simpla basic anrop skulle jag tro. Men jag ville först förstå dessa sys calls som drar igång spelet.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1175
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: Sys calls

Inläggav carlsson » 10 januari 2019, 17:48

SYS 2049 är väl inte så bra, då kommer man att hamna på opkod $0B som är illegal och avkodas som ANC #$08, följt av en ASL och BRK.
Användarvisningsbild
carlsson
VIC-20 Guru
VIC-20 Guru
 
Inlägg: 2299
Blev medlem: 10 oktober 2007, 16:24
Ort: Västerås

Re: Sys calls

Inläggav bjonte » 11 januari 2019, 08:19

Skarpsynt. Nej, det verkar ju knasigt.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1538
Blev medlem: 17 april 2006, 23:12

Re: Sys calls

Inläggav Redreamer » 11 januari 2019, 08:54

Det där begrep jag inte riktigt. Ska fundera på de i kväll.
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1175
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: Sys calls

Inläggav bjonte » 11 januari 2019, 09:18

Adressen 2049 pekar på själva BASIC-radens data, alltså inget maskinkodsprogram, så att hoppa dit kommer inte göra något vettigt.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1538
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 3 gäster

Banners

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