;----------------------------------------------------------------------- ; [PEGASUS-9] Relay Box for Video Effect Switcher : Nov. 1994 ;----------------------------------------------------------------------- ;##### RAM Map ##### dseg org 0000h rx_fifo ds 8192 rx_top ds 2 rx_end ds 2 rsb ds 1 dcb ds 1 channel ds 1 keyno ds 1 relay ds 2 led ds 2 mode ds 1 timer ds 3 pointer ds 1 ;##### I/O Map ##### cseg sio_a equ 0018h sio_b equ 001ah pio_a equ 001ch pio_b equ 001eh ;##### MACRO ##### io_set macro @1,@2 ld a,@2 out (@1+1),a endm io_put macro @1,@2 ld a,@2 out (@1+0),a endm ;##### RESET ##### org 0000h ld sp,0ffffh di jp main ;##### INT / NMI ##### org 0020h dw _midi_ _midi_: ex af,af' exx ld de,(rx_top) ld a,10000000b or d ld h,a ld l,e in a,(sio_a+0) ld (hl),a inc de res 5,d ld (rx_top),de exx ex af,af' ei reti org 0066h retn ;##### Main ##### main: ld hl,08000h ld a,0f0h _ram_clear_loop: ld (hl),0 inc hl cp h jr nc,_ram_clear_loop io_set pio_a,0cfh ; Mode 3 io_set pio_a,00000000b ; 0:Out / 1:In io_set pio_a,007h ; Interrupt Disable io_set pio_b,0cfh ; Mode 3 io_set pio_b,00000000b ; 0:Out / 1:In io_set pio_b,007h ; Interrupt Disable io_set sio_b,00011000b ; Channel Reset B io_set sio_b,00000100b ; Resister Point = 4 io_set sio_b,11000100b ; Mode io_set sio_b,00000001b ; Resister Point = 1 io_set sio_b,00000000b ; Interrupt Mode io_set sio_b,00000010b ; Resister Point = 2 io_set sio_b,20h ; Vector Address io_set sio_a,00011000b ; Channel Reset A io_set sio_a,00000100b ; Resister Point = 4 io_set sio_a,11000100b ; Mode io_set sio_a,00000001b ; Resister Point = 1 io_set sio_a,00010000b ; Interrupt Mode io_set sio_a,00000011b ; Resister Point = 3 io_set sio_a,11000001b ; Receive Start im 2 ei in a,(sio_a+0) ; dummy read call relay_output call led_output loop: call not_busy call rx_data_check jr loop ;##### Subroutines ##### out_1_8: xor 11111111b out (c),a ret out_9_10: ld b,a ld a,00000101b ; Resister Point = 5 out (c),a ld a,00001000b bit 0,b ; No. 9 check jr z,_9_10_1 set 7,a ; DTR ON _9_10_1: out (c),a ret relay_output: ld a,(relay+0) xor 11111111b ld c,pio_a call out_1_8 ld a,(relay+1) xor 11111111b ld c,sio_a+1 call out_9_10 ret led_output: ld a,(led+0) ld c,pio_b call out_1_8 ld a,(led+1) ld c,sio_b+1 call out_9_10 ret rx_data_check: ld de,(rx_end) ld hl,(rx_top) and a ; CY <-- 0 sbc hl,de ret z ld a,10000000b or d ld h,a ld l,e ld b,(hl) inc de res 5,d ld (rx_end),de bit 7,b jr z,50$ ; running ld a,b cp 0f8h ret nc cp 0f0h jr c,10$ xor a ld (rsb),a ret 10$: ld a,b and 00001111b ld (channel),a ld a,b and 11110000b ld (rsb),a xor a ld (dcb),a ret 50$: ld a,(rsb) cp 0 ret z cp 0c0h ret z cp 0d0h ret z ld a,(dcb) cp 0 jr nz,90$ inc a ld (dcb),a ld a,b ld (keyno),a ret 90$: xor a ld (dcb),a ld a,(rsb) cp 0a0h ret nz ld a,(channel) cp 00eh ret nz ld a,(keyno) cp 11 ret c cp 20 ret nc ld a,1 ld (mode),a ld a,(relay+0) ld d,a ld a,(keyno) cp 11 jp z,_11 cp 12 jp z,_12 cp 13 jp z,_13 cp 14 jp z,_14 cp 15 jp z,_15 cp 16 jp z,_16 cp 17 jp z,_17 cp 18 jp z,_18 cp 19 ret nz ld a,(relay+1) res 0,a bit 6,b jr z,_19_mix set 0,a _19_mix: ld (relay+1),a ld (led+1),a call relay_output call led_output ret _11: res 0,d bit 6,b jp z,_all_mix set 0,d jp _all_mix _12: res 1,d bit 6,b jp z,_all_mix set 1,d jp _all_mix _13: res 2,d bit 6,b jp z,_all_mix set 2,d jp _all_mix _14: res 3,d bit 6,b jp z,_all_mix set 3,d jp _all_mix _15: res 4,d bit 6,b jp z,_all_mix set 4,d jp _all_mix _16: res 5,d bit 6,b jp z,_all_mix set 5,d jp _all_mix _17: res 6,d bit 6,b jp z,_all_mix set 6,d jp _all_mix _18: res 7,d bit 6,b jp z,_all_mix set 7,d jp _all_mix _all_mix: ld a,d ld (relay+0),a ld (led+0),a call relay_output call led_output ret ;##### Hobby(^_^;) ##### not_busy: ld a,(mode) cp 0 ret nz ld a,(timer+0) dec a ld (timer+0),a cp 0 ret nz ld a,(timer+1) dec a ld (timer+1),a cp 0 ret nz ld a,15 ld (timer+1),a ld a,(pointer) ld c,a ld b,0 ld hl,table add hl,bc ld a,(hl) ld (led+0),a call led_output ld a,(pointer) inc a ld (pointer),a cp 66 ret nz ld a,0 ld (pointer),a ret table: db 00000001b,00000100b,00010000b,01000000b ; 0-3 db 00010000b,00000100b,00000001b ; 4-6 db 00000010b,00001000b,00100000b,10000000b ; 7-10 db 00100000b,00001000b,00000010b ; 11-13 db 00000001b,00000010b,00000100b,00001000b ; 14-17 db 00010000b,00100000b,01000000b,10000000b ; 18-21 db 01000000b,00100000b,00010000b,00001000b ; 22-25 db 00000100b,00000010b,00000001b ; 26-28 db 00000010b,00001000b,00100000b ; 48-50 db 10000000b,01100000b,00011000b,00000110b ; 29-32 db 00000001b,00000110b,00011000b,01100000b ; 33-36 db 10000000b,11100000b,01111000b,00011110b ; 37-40 db 00000111b,00000001b,00000111b,00011110b ; 41-44 db 01111000b,11100000b,10000000b ; 45-47 db 11000000b,11010000b,11010100b,11010101b ; 51-54 db 11010111b,11011111b,11111111b ; 55-57 db 11111101b,11110101b,11010101b,01010101b ; 58-61 db 00010101b,00000101b,00000001b,00000000b ; 62-65 end