· Text 3209 · w8 · inlagg
Nu finns multitask hanteraren i sitt slutliga tillstånd i inlådan,
dvs filerna MULTITASK.BAS, MULTITASK.DOC och MTASK.BAS
Multitask hanteraren tar ca 450 byte i anspråk och laddas på stacken.
För ABC806, kommer en multitask hanterare+litet OS med bla minnes-
allokering, långa hopp, minnes mappning och möjlighet att köra
processer i extern minnet som är upp till 256K byte stora.
16 processer kan köras samtidigt. Denna hanterare körs som en task
under den vanliga multitaskhanteraren, och upptar totalt 85 bytes av
det vanliga primär minnet.
Det som finns klart idag är ett program som kan ladda en boot fil för
den externa multitaskdrivern, även själva multitask drivern finns
klar & fungerande, det som saknas är alla system anrop - men de kommer.
Tanken är att man med hjälp av en laddare skall kunna ladda en typ av
EXE filer, begära minnesallokering och sedan starta processen.
Tanken är att varje process skall kunna vara 256K stor, dvs 64st 4K-block
Under körning så mappas 16K minne in där 8K skall vara en program sida,
och 4K global stack, och resterande 4K global dataarea.
Sedan kan långa hopp och CALLs göras mellan program sidor genom RST anrop
Ex: LD HL,adress
LD A,rst funktion
LD B,program sida
RST 30H ; Nu blockas den nya program sidan in och
; exekvering startas på HL.
Sedan skall man kanske göra det möjligt att blocka sidor ut & in från
fil på disk om primär minnet inte räcker till, tänk att kunna köra
16 processer på 256K vardera + 16 processer i det vanliga minnet !
Det blir bökigt att skriva assembler program som utnyttjar sig av mer
än 16K minne, speciellt då misstag gör att man måste boota om igen,
däremot skulle en kompilator kunna generera kod på så sätt att den la
funktioner & procedurer i olika sidor, tex small C omskriven.
Nå det blir mycket på engång, jag kommer att skriva multitask hanteraren
och system anropen klart, jag är mycket tacksam för synpunkter på
och förslag på det hela.