<< Вернуться к содержанию
О многозадачности на Пълдине. Простой пример.
Исходник от 2-задачного монитора для ненастоящей мультизадачности,
но примерно подобно Windows95, основанный на том, что когда программа
стоит, она дает системе знать, и система дает работать другой задаче.
В этот монитор можно с лёгкостью добавить несколько задач и
принудительное переключение по таймеру и получить полноценное ядро.
org $100
section 0
rega ds 1
regb ds 1
regx ds 1
regp ds 1
regsp ds 1
regpc ds 1
regs_size = *
ends
jmp init
task1
ldx #text1
int $23
jsr peekMSG
bra task1
text1 db 10, 'Task 1',0
task2
ldx #text2
int $23
jsr peekMSG
bra task2
text2 db 10, 'Task 2',0
init
ldx #rtask1
ldab #/task1
ldaa #task1
lds #stack1
psha
pshb
sts x, regsp
ldx #rtask2
ldab #/task2
ldaa #task2
lds #stack2
psha
pshb
sts x, regsp
ldx #tasklist
stx ctask
ldx 0, x
jmp peekMSG1
peekMSG
stx tempx
ldx ctask
ldx 0, x
staa x, rega
stab x, regb
ldaa tempx
staa x, regx
ldaa tempx+1
staa x, regx+1
sts x, regsp
ldx ctask
inx
inx
stx ctask
ldx 0,x
bne peekMSG1
ldx #tasklist
stx ctask
ldx 0,x
peekMSG1
lds x, regsp
ldaa x, rega
ldab x, regb
ldx x, regx
rts
tempx dw 0
ctask dw tasklist
tasklist dw rtask1, rtask2, 0
rtask1 ds regs_size
rtask2 ds regs_size
ds $100
stack1 ds $100
stack2 ds $100