domingo, 13 de janeiro de 2008

LPRINT na porta de Joystick

Estou trabalhando numa rotina para capturar o Hook de impressão e redirecionar o caractere à porta de joystick. O código, até o presente momento, consome 86 bytes.



;
; Impressao serial via
; porta de Joystick do MSX
;
; danjovic@hotmail.com
; http://hotbit.blogspot.com
;
; Versao 1.0 14/01/2008
;
; Licenca de uso: GNU GPL
;
;
; Compilado no ASMSX
; http://www.robsy.net/asmsx.htm


ORG 0E000H

.BASIC
.START INSTALA



; Bits do Registro 15 do PSG
BTXD EQU 2
ABSEL EQU 6

; Registros do PSG
PSGAD EQU 0A0H
PSGWR EQU 0A1H
PSGRD EQU 0A2H


; BaudRates
;BAUD EQU 6 ; 19200 Bauds, (6)
;BAUD EQU 10 ; 14400 Bauds, (10)
BAUD EQU 18 ; 9600 Bauds, (17-19)
;BAUD EQU 42 ; 4800 Bauds, (41-43)
;BAUD EQU 92 ; 2400 Bauds, (90-93)
;BAUD EQU 190 ; 1200 Bauds, (188-191)



;
; Envia o Caractere no reg A
; para a porta de B (Joystick)
; 9600,8,n,1

PRNTJ232:
;CALL 0a2h
DI
PUSH AF
PUSH BC
PUSH HL

LD C,A ; Caractere a ser impresso
LD H,BAUD ; define taxa Baud

LD A,15 ; Registro 15
OUT [PSGAD],A
IN A,[PSGRD]
;LD [PSGSAV],A
SET ABSEL,A ; Porta Joystick B
OUT [PSGWR],A
;LD B,A ; salva conteudo reg 15

CALL SND232
;LD A,[PSGSAV]
;OUT [PSGWR],A

POP HL
POP BC
POP AF
AND A
EI
INC SP ; descarta stack
INC SP
RET




SND232:
; Entradas:
; C: Byte a ser transmitido
; A: Estado atual do registrador 15 do PSG
; H: Constante para Baud Rate
;

;
; Envia Start bit (txd=0)
;
LD L,H ; 4+1
CALL SND0 ; 17+1 + (SEND0)

;
; 8 bits do dado, LSbit primeiro
;
LD B,08H ; 7+1
S20:
LD L,H ; 4+1
RRC C ; 8+2
CALL C,SND1 ; 17+1 + (SEND0)/ 10+1 F
CALL NC,SND0 ; 17+1 + (SEND0)/ 10+1 F
DJNZ S20 ; 13+1 b


;
; Stopbit - retorna linha txd para IDLE
;
LD L,BAUD ; 8
CALL SND1 ; 17+1 + (SEND1)
LD B,A ; 4+1
RET ; 10+1


;
; Envia um bit 0
;
SND0:
RES BTXD,A ; txd=0 8+2
OUT [PSGWR],A ; 11+1
S01: DEC L ; 4+1
JP NZ,S01 ; 10+1 ;
RET ; 10+1

;
; Envia um bit 1
;
SND1:
SET BTXD,A ; txd=1 8+2
OUT [PSGWR],A ; 11+1
S11: DEC L ; 4+1
JP NZ,S11 ; 10+1 ;
RET ; 10+1


PSGSAV:
DS 1


;
; Instala subrotina no
; HOOK da impressora
;
; Do livro +50 dicas para o MSX
;
HLPT EQU 0FFB6H
;
INSTALA:
LD HL,PRNTJ232
LD [HLPT+1],HL
LD A,0C3H
LD [HLPT],A
RET

Nenhum comentário: