Newer
Older
uBix-Retro / dump / oa-2.0.9 / sysapps / irtx / irtx.a65

#ifndef ROM

#define   NOPRG
/*#define   CLK1MHZ*/        /* otherwise 2Mhz default    */

#endif
          .(
#ifdef ROM
          .word ende
          .byt PK_PRG
          .byt 8
          .word 0
          .word PRG
#ifndef NOMMU
          .byt 8,8,9,9,$a,$a,$b,$b,$c,$c,$d,$d,$e,$e,<-1
#else
	  .byt <-1
#endif
          .asc "irtx",0,0

#else	/* ROM */

#include  "kdefs.i65"
#include  "kernel.i65"
#include  "chips/via6522.i65"
#include  "lib6502.i65"

#ifdef NOPRG

          .word $800
          *=$800
          jmp PRG

#else
          .word $800
          *=$800
          .word 0
          .byt PK_PRG
          .byt 16
          .word 0
          .word mainprg
          .byt <-1
mainprg   jmp PRG

#endif
#endif /* ROM */

#include  "irtx.i65"

/**************************** irtxmain ********************************/

#if 0
#ifndef VIA
#define   VIA       $ec10	/* $e830 */
#endif
#endif

#define   MP_MENU   0
#define   MP_BEF    2
#define   MP_SC     4
#define   MP_ADR    6

PRG       .(
	.zero
mp        .word 0
bp        .word 0
	.text
     
          ;jsr initir

          lda #<main
          ldy #>main
          jsr mloop
#ifdef NOPRG
	  rts
#else
	  jmp TERM
#endif
          
mainloop  lda mp
          pha
          lda mp+1
          pha
          
          lda PCBUF+ITX_MSG
          asl
          tay
          lda mainadr,y
          pha
          lda mainadr+1,y
          tay
          pla
          jsr mloop
          
          pla
          sta mp+1
          pla
          sta mp

showmenu  ldy #MP_MENU
          lda (mp),y
          pha
          iny
          lda (mp),y
          tay
          pla
          jmp Txtout

main      .word mainmenu
          .word mainbef
          .word maincode
          .word mainloop
          
mainmenu  .asc TC_FF,"^J^J^J"
          .asc "[1]      Sony-Master^M^J"
          .asc "[2]      Sony-CD^M^J"
          .asc "[3]      Universum-TV^J^M"
          .asc "^J^M[q]      Ende^M^J",0 

mainbef   .asc "123",0

maincode  .word 0,1,2

mainadr   .word sonymaster,sonycdtab,unitv
    
&mloop    .(
          sta mp
          sty mp+1
ml        jsr showmenu
mlx       jsr Getc
          tax
          cmp #"q"
          beq end
          
          ldy #MP_BEF
          lda (mp),y
          sta bp
          iny
          lda (mp),y
          sta bp+1
          
          ldy #0
ml1       lda (bp),y
          beq ml
          txa
          cmp (bp),y
          beq execute
          iny
          bne ml1     

end       clc
          rts

execute   tya
          asl
          pha
          ldy #MP_SC
          lda (mp),y
          sta bp
          iny
          lda (mp),y
          sta bp+1 
          pla
          tay         
          lda (bp),y
          sta PCBUF+ITX_MSG
          iny
          lda (bp),y
          sta PCBUF+ITX_MSG+1
          ldy #MP_ADR
          lda (mp),y
          sta bp
          iny
          lda (mp),y
          sta bp+1
          jsr mll
          jmp mlx
mll       jmp (bp)
          .)

sonycdtab .(
          .word menucdtxt
          .word befcdtab
          .word sycdtab
          .word sendsony
                    
menucdtxt .asc TC_FF,"^J^J^J"
          .asc "[P]      Play^M^J"
          .asc "[U]      Pause^M^J"
          .asc "[I]      Continue^M^J"
          .asc "[Y]      Display^M^J"
          .asc "[S]      Stop^M^J"
          .asc "[R]      Repeat^M^J"
          .asc "[L]      Shuffle^M^J"
          .asc "[N]      Next song^M^J"
          .asc "[V]      Previous song^M^J"
          .asc "[1-9]    Song no. 1-9^M^J"
          .asc "[A-G]    Song no. 10-16^M^J"
          .asc "[H]      >16^M^J"
          .asc "[Q]      Quit^M^J"
          .asc 0   

befcdtab  .asc "puysrnv123456789abcdefghli",0

sycdtab   .word SY_CD_PLAY,   SY_CD_PAUSE,   SY_CD_DISP
          .word SY_CD_STOP,   SY_CD_CLR,     SY_CD_AMSV
          .word SY_CD_AMSZ,   SY_CD_1,       SY_CD_2
          .word SY_CD_3,      SY_CD_4,       SY_CD_5
          .word SY_CD_6,      SY_CD_7,       SY_CD_8
          .word SY_CD_9,      SY_CD_10,      SY_CD_11
          .word SY_CD_12,     SY_CD_13,      SY_CD_14
          .word SY_CD_15,     SY_CD_16,      SY_CD_G16
          .word SY_CD_SHUFF,  SY_CD_CONT
          .)
          
sonymaster .(
          .word symamenu
          .word symabef
          .word symasc
          .word sendsony
          
symamenu  .asc TC_FF,"^J^J^J"
          .asc "[L]      LDP on/off^M^J"
          .asc "[V]      VTR on/off^M^J"
          .asc "[T]      TV on/off^M^J"
          .asc "[A]      Audio on/off^M^J"
          .asc "[+]      Master Volume up^M^J"
          .asc "[-]      Master Volume down^M^J"
          .asc "[M]      Muting^M^J"
          .asc "  Signal sources:^M^J"
          .asc "[1]      CD^M^J"
          .asc "[2]      Tuner^M^J"
          .asc "[3]      Phono^M^J"
          .asc "[4]      Tape^M^J"
          .asc "[5]      DAT^M^J"
          .asc "[6]      Video 1^M^J"
          .asc "[7]      Video 2^M^J"
          .asc "[8]      Video 3^M^J"
          .asc "[q]      End^M^J",0
          
symabef   .asc "lvta+-m12345678",0

symasc    .word     SY_MC_P_LDP,SY_MC_P_VTR,SY_MC_P_TV,SY_MC_P_AUDIO
          .word     SY_MC_VOLU,SY_MC_VOLD,SY_MC_MUTE
          .word     SY_MC_CD,SY_MC_TUNER,SY_MC_PHONO,SY_MC_TAPE,SY_MC_DAT
          .word     SY_MC_VIDEO1,SY_MC_VIDEO2,SY_MC_VIDEO3
          .)
          
unitv     .(
          .word unitvmenu
          .word unitvbef
          .word unitvsc
          .word unitvsend
          
unitvmenu .asc TC_FF,"^J^J^J"
          .asc "[T]      TV on/off^J^M"
          .asc "[V]      TV/VIDEO^J^M"
          .asc "[+]      volume up^J^M"
          .asc "[-]      volume down^J^M"
          .asc "[M]      Muting^J^M"
          .asc "[1-9]    Program 1-9^J^M"
          .asc "[A-C]    Program 10-12^J^M"
          .asc "[Q]      Ende^J^M",0
          
unitvbef  .asc "tv+-m123456789abc",0

unitvsc   .word UNI_TV_POWER,UNI_TV_VIDEO,UNI_TV_VOLU,UNI_TV_VOLD
          .word UNI_TV_MUTE,UNI_TV_1,UNI_TV_2,UNI_TV_3,UNI_TV_4
          .word UNI_TV_5,UNI_TV_6,UNI_TV_7,UNI_TV_8,UNI_TV_9
          .word UNI_TV_10,UNI_TV_11,UNI_TV_12
          .)
                         
          .)
          
getif     .(
#ifdef SEM_T1
	  clc
	  ldx #SEM_T1
	  jsr PSEM
#endif
	  php
          sei
          lda VIA+VIA_ACR
          and #%00111111
          sta VIA+VIA_ACR

          lda VIA+VIA_DDRB
          ora #%10000000
          sta VIA+VIA_DDRB

          lda VIA+VIA_DRB
          ora #%10000000
          sta VIA+VIA_DRB

          lda #%01000000
          sta VIA+VIA_IFR
          sta VIA+VIA_IER

	  plp
          rts
          .)

freif	  .(
#ifdef SEM_T1
	  ldx #SEM_T1
	  jmp VSEM
#else
	  rts
#endif
	  .)


/**************************** irtxsony.a65 ********************************/


#ifdef CLK1MHZ

#define   SY_TI_START    2500
#define   SY_TI_PAUSE    500
#define   SY_TI_0        650
#define   SY_TI_1        1250
#define   SY_TI_XPAUS    20000

#define   UNI_TI_PULS    500
#define   UNI_TI_0       1500
#define   UNI_TI_1       3500
#define   UNI_TI_XPAUS   20000

#else

#define   SY_TI_START    5000
#define   SY_TI_PAUSE    1000
#define   SY_TI_0        1250
#define   SY_TI_1        2500
#define   SY_TI_XPAUS    40000

#define   UNI_TI_PULS    1000
#define   UNI_TI_0       3000
#define   UNI_TI_1       7000
#define   UNI_TI_XPAUS   40000

#endif

#define   SD_BITS   0
#define   SD_REPT   1
#define   SD_START  2
#define   SD_P0     4
#define   SD_0      6
#define   SD_P1     8
#define   SD_1      10
#define   SD_XPAUS  12

          .(
	.zero
p         .word 0
	.data        
msgcnt    .byt 0
bitcnt    .byt 0
msg       .word 0
	.text

          .(
&&sendsony 
          lda #<sonydat
          ldy #>sonydat
          bne x1
&&unitvsend
          lda #<univdat
          ldy #>univdat
x1
          sta p
          sty p+1
         
	  jsr getif
 
          ldy #SD_REPT
          lda (p),y
          sta msgcnt
      
          sei
          
          lda VIA+VIA_ACR
          ora #%11000000
          sta VIA+VIA_ACR
          
ssml      ldy #SD_START
          lda (p),y
          sta VIA+VIA_T1LL
          iny
          lda (p),y
          sta VIA+VIA_T1CH         ; start timer here

          lda PCBUF+ITX_MSG
          sta msg
          lda PCBUF+ITX_MSG+1
          sta msg+1
     
          ldy #SD_BITS             ; number of bits
          lda (p),y
          sta bitcnt
 
bitloop   lda msg
          lsr
          bcs pause1
          ldy #SD_P0
          .byt $2c
pause1    ldy #SD_P1
          jsr setsdti              ; set time for next half period
          jsr waitend              ; wait till current half period is over

          lsr msg+1
          ror msg
          bcc set0

          ldy #SD_1
          .byt $2c
set0      ldy #SD_0
          jsr setsdti              ; set time for next half period
          jsr waitend

          dec bitcnt
          bne bitloop

          dec msgcnt
          beq msgend
          
          ldy #SD_XPAUS
          jsr setsdti		   ; pause after last bit

          jsr waitend

          jsr waitend
          
          jmp ssml
          
msgend    lda VIA+VIA_ACR
          and #%00111111
          sta VIA+VIA_ACR
          lda #%01000000
          sta VIA+VIA_IFR
          cli          
	  jmp freif
          rts
          .)

setsdti   .(
          lda (p),y
          sta VIA+VIA_T1LL
          iny
          lda (p),y
          sta VIA+VIA_T1LH
          rts
          .)

waitend   .(
          lda #%01000000
          sta VIA+VIA_IFR
wl        lda #%01000000
          and VIA+VIA_IFR
          beq wl
          rts
          .)

sonydat   .byt 12             ; number of bits
          .byt 5              ; number of repetitions for a single command
          .word SY_TI_START   ; length start bit
          .word SY_TI_PAUSE   ; break before 0
          .word SY_TI_0       ; 0
          .word SY_TI_PAUSE   ; break before 1
          .word SY_TI_1       ; 1
          .word SY_TI_XPAUS   ; break between repetitions
          
univdat   .byt 6              ; number of bits
          .byt 4              ; number of repetitions for a single command
          .word UNI_TI_PULS   ; length start bit
          .word UNI_TI_0      ; break before 0
          .word UNI_TI_PULS   ; 0
          .word UNI_TI_1      ; break before 1
          .word UNI_TI_PULS   ; 1
          .word UNI_TI_XPAUS  ; break between repetitions
          .)
      
/**********************************************************************/

Getc	.(
	ldx #STDIN
	sec
	jmp fgetc
	.)

Txtout	.(
	.zero
p	.word 0
	.text
	sta p
	sty p+1
	ldy #0
l0	lda (p),y
	beq end
	ldx #STDOUT
	sec
	jsr fputc
	iny
	jmp l0
end	rts
	.)
ende
          .)