1.1 --- a/macros.oph Sun Jun 28 14:08:35 2015 +0200
1.2 +++ b/macros.oph Sun Jun 28 15:45:29 2015 +0200
1.3 @@ -183,4 +183,34 @@
1.4 jmp copy_from_user_stack
1.5 .macend
1.6
1.7 +; push A onto the "user space" stack
1.8 +;
1.9 +; affects: USER (gains A), TEMP
1.10 +
1.11 +.macro pushA
1.12 + sei
1.13 + pha
1.14 + sty TEMP
1.15 + ldy #0
1.16 + sta (USER), y
1.17 + .invoke sub16 1, USER
1.18 + ldy TEMP
1.19 + pla
1.20 + cli
1.21 +.macend
1.22 +
1.23 +; pull A from the "user space" stack
1.24 +;
1.25 +; affects: A, USER (loses A), TEMP
1.26 +
1.27 +.macro pullA
1.28 + sei
1.29 + sty TEMP
1.30 + .invoke add16 1, USER
1.31 + ldy #0
1.32 + lda (USER), y
1.33 + ldy TEMP
1.34 + cli
1.35 +.macend
1.36 +
1.37 ; vim: tabstop=4 expandtab shiftwidth=4
2.1 --- a/switcher.oph Sun Jun 28 14:08:35 2015 +0200
2.2 +++ b/switcher.oph Sun Jun 28 15:45:29 2015 +0200
2.3 @@ -26,6 +26,8 @@
2.4 .alias CURRENT $74
2.5 .alias CURRENTH $75
2.6 .alias USER $76
2.7 +.alias USERH $77
2.8 +.alias TEMP $78
2.9 .alias ARG0 $80
2.10 .alias ARG0H $81
2.11 .alias ARG1 $82
2.12 @@ -407,8 +409,11 @@
2.13 .byte 0 ; saved flags
2.14 .word first_task_start ; saved PC
2.15 first_task_start:
2.16 - .invoke add16 1, $7000
2.17 - jmp first_task_start
2.18 + lda #1
2.19 +first_task_continue:
2.20 + sta $7000
2.21 + adc #1
2.22 + jmp first_task_continue
2.23
2.24
2.25
2.26 @@ -418,8 +423,11 @@
2.27 .byte 0 ; saved flags
2.28 .word second_task_start ; saved PC
2.29 second_task_start:
2.30 - .invoke add16 1, $7008
2.31 - jmp second_task_start
2.32 + lda #1
2.33 +second_task_continue:
2.34 + sta $7008
2.35 + adc #1
2.36 + jmp second_task_continue
2.37
2.38
2.39
2.40 @@ -429,20 +437,25 @@
2.41 .byte 0 ; saved flags
2.42 .word third_task_start ; saved PC
2.43 third_task_start:
2.44 - .invoke store16 0, $7010
2.45 ldx #0
2.46 + ldy #0
2.47 _loop:
2.48 - lda $7010
2.49 - cmp #$ff
2.50 + cpy #$ff
2.51 bne _continue
2.52 + inc $7011
2.53 lda $7011
2.54 cmp #$ff
2.55 bne _continue
2.56 + tya
2.57 + .invoke pushA
2.58 txa
2.59 .invoke call remove_task
2.60 + .invoke pullA
2.61 + tay
2.62 inx
2.63 _continue:
2.64 - .invoke add16 1, $7010
2.65 + iny
2.66 + sty $7010
2.67 jmp _loop
2.68 third_task_stack:
2.69 .word 0