Kristoffer Eriksson
<5357>
· Text 4676 · w8 · kommentar
1986-09-01 04:40
Ärende: BASIC-tolken i ABC800
1) ALLOZMEM allokerar ett avsnitt minne vid den adress Y.HEAP
anger, och ökar Y.HEAP. I princip kan man frigöra minnet sedan
genom att återge Y.HEAP dess ursprungliga värde, förutsatt att
inget ytterligare minne allokerats, t ex för Basic-variabler.
Y.HEAP "noll"ställs också av NEW, CLEAR och liknande.
Hur länge behöver du minnet? När man behöver någon buffert i en
avgränsad rutin, brukar man ta minnet från stacken, genom att
minska SP med så många byte man behöver. Då får man start-
adressen ur SP också. För att frigöra minnet, minskar man SP
igen, eller ev laddar den med ett sparat värde.
Tar man mycket minne från stacken bör man kontrollera att den
ändå har minst 100 bytes tillgodo på Y.HEAP (SP-100 > (Y.HEAP)),
annars är error 201 påkallat.
2) Flaggan på 65315 (INT.DIR) används för att avgöra om den rad som
kompileras har matats från tangentbordet, eller kommer från en
pågående LOAD-operation. Om ett program är under exekvering, kan
du se det på att SP är mindre än innehållet i Y.BOFA. Utnyttja gärna
rutinen HLBOFA när du kollar.
3) Om du menar omvandling av tal mellan binär- och ASCII-form, så
finns det naturligtvis, men dessa rutiner har inte någon fast
adress, så dem ska du inte använda annat än om du vid varje
inladdning letar upp den adress som gäller just den aktuella
maskinen.
4) STRCOMP kompilerar en rad vid på adressen HL till en buffert vid
DE. Ska du använda den till något annat än strängparametrar till
Basic-instruktioner?
5) Vad ska du ha det till? Det finns ingen adress gemensam för alla
versioner som gör fixup heller. Kanske den CALL som ligger 10
byte efter RUN-kommandots start gör fixup, men då måste du vid
varje inladdning leta upp adressen till RUN-kommandot, för den
är heller inte fast.