home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 4: Demo 1
/
almathera_demo1.bin
/
sourcecode
/
a68kex
/
say.asm
< prev
next >
Wrap
Assembly Source File
|
1995-03-17
|
7KB
|
273 lines
***************************************
* say - speak a text file *
* *
* written by E. Lenz *
* Johann-Fichte-Strasse 11 *
* 8 Munich 40 *
* Germany *
* *
***************************************
**** exec ****
_AbsExecBase equ 4
_LVOForbid equ -$84
_LVOPermit equ -$8a
_LVOAddPort equ -$162
_LVORemPort equ -$168
_LVOGetMsg equ -$174
_LVOReplyMsg equ -$17a
_LVOWaitPort equ -$180
_LVOCloseLibrary equ -$19e
_LVOOpenDevice equ -$1bc
_LVOCloseDevice equ -$1c2
_LVODoIo equ -$1c8
_LVOOpenLibrary equ -$228
**** dos *****
_LVOOpen equ -$1e
_LVOClose equ -$24
_LVORead equ -$2a
_LVOWrite equ -$30
***** translator ****
_LVOTranslate equ -$1e
TC_SIGRECVD equ $1a
pr_MsgPort equ $5c
pr_CLI equ $ac
ThisTask equ $114
VBlankFrequency equ $212
SIGBREAK_ANY equ $1000
XREF ReadLn,request,_Request
move.l a0,d7 save instruction from CLI
move.l d0,d4
subq.w #1,d4
clr.b 0(a0,d4.w)
movea.l _AbsExecBase,a6 test if WB or CLI
movea.l ThisTask(a6),a0
move.l a0,writerep+$10
lea TC_SIGRECVD(a0),a1 get task signal address
move.l a1,TaskSigs
moveq #0,d0
tst.l pr_CLI(a0)
bne.s isCLI
lea pr_MsgPort(a0),a0 for WB get WB Message
jsr _LVOWaitPort(a6)
jsr _LVOGetMsg(a6)
moveq #0,d4 make sure there's no instruction
isCLI move.l d0,-(a7)
cmpi.b #60,VBlankFrequency(a6) test if PAL or NTSC
beq.s isNTSC
move.l #'256/',window+12
isNTSC lea transname(pc),a1 open translator library
moveq #0,d0
jsr _LVOOpenLibrary(a6)
movea.l d0,a4
tst.l d0 this is one of the few cases
bne.s Transok where this test is vital
lea transname(pc),a0 first line
lea notfnd(pc),a1 second line
suba.l a2,a2 no third line
lea hdtxt(pc),a3 header
lea OkTxt(pc),a4 gadget text
suba.l a5,a5 no 2nd gadget
moveq #0,d0
moveq #1,d1
jsr request
suba.l a3,a3
bra nocon
Transok lea dosname(pc),a1 open DOS library
moveq #0,d0
jsr _LVOOpenLibrary(a6)
movea.l d0,a3
tst.l d0
beq.s Gerror
movea.l d0,a6 open Console window
move.l #window,d1
move.l #1005,d2
jsr _LVOOpen(a6)
movea.l d0,a5
tst.l d0
Gerror beq error
movea.l _AbsExecBase,a6
lea writerep(pc),a1
jsr _LVOAddPort(a6)
lea talkio(pc),a1
moveq #0,d0
moveq #0,d1
lea nardevice(pc),a0
jsr _LVOOpenDevice(a6)
tst.l d0
bne exit
movea.l a3,a6
move.l d7,d1
tst.l d4
bne.s file
moveq #0,d0
move.l #160,d1
moveq #18,d2
lea title(pc),a0
jsr _Request
move.l d0,d1
bra.s file
move.l #filename,d1 open old file
file move.l #1005,d2
jsr _LVOOpen(a6)
move.l d0,filehandle
Gexit beq exit
lea talkio(pc),a1
move.l #writerep,14(a1)
move.w #150,48(a1) rate 40-400
move.w #110,50(a1) pitch 65-320
move.w #0,52(a1) mode 0-1
move.w #0,54(a1) sex 0-1
move.l #amaps,56(a1) masks
move.w #4,60(a1) 4 masks
move.w #64,62(a1) volume
move.w #22200,64(a1)
saylop bsr Read
move.l d1,d4
beq.s Gexit
movea.l TaskSigs,a0 test for ***BREAK***
move.l (a0),d0
andi.l #SIGBREAK_ANY,d0
bne.s Gexit
lea outtext(pc),a1 clear translated stuff
moveq #0,d0
moveq #$7f,d1
clear move.l d0,(a1)+
dbra d1,clear
move.l a1,a2 write to console
move.l a5,d1
move.l #Buffer,d2
move.l d4,d3
jsr _LVOWrite(a6)
cmpi.l #1,d4
beq.s saylop
move.l d4,d0
clr.b -1(a2)
lea Buffer(pc),a0
lea outtext(pc),a1
move.l #512,d1
movea.l a4,a6
jsr _LVOTranslate(a6)
lea talkio(pc),a1
move.w #3,28(a1)
move.l #512,36(a1)
move.l #outtext,40(a1)
move.l _AbsExecBase,a6
jsr _LVODoIo(a6)
bra saylop
exit move.l _AbsExecBase,a6
lea writerep(pc),a1
jsr _LVORemPort(a6)
lea talkio(pc),a1
jsr _LVOCloseDevice(a6)
movea.l a4,a1 close translator library
jsr _LVOCloseLibrary(a6)
error move.l a3,a6
move.l filehandle(pc),d1 close file
beq.s nofile
jsr _LVOClose(a6)
nofile move.l a5,d1 close console
beq.s nocon
jsr _LVOClose(a6)
nocon move.l _AbsExecBase,a6
move.l (a7)+,d0
beq.s NoBench
jsr _LVOForbid(a6) reply to WB
movea.l d0,a1
jsr _LVOReplyMsg(a6)
jsr _LVOPermit(a6)
NoBench move.l a3,d0
beq.s NoDos
movea.l d0,a1 close dos.lib
jsr _LVOCloseLibrary(a6)
NoDos moveq #0,d0
rts
Read movem.l a2-a5,-(a7)
movea.l a3,a6
move.l BufNum(pc),d0
movea.l BufPnt(pc),a0
movea.l #Buf2,a1
movea.l #Buffer,a2
movea.l filehandle(pc),a3
jsr ReadLn
move.l d0,BufNum
move.l a0,BufPnt
movem.l (a7)+,a2-a5
rts
TaskSigs ds.l 1
amaps dc.b 3,5,10,12
transname dc.b 'translator.library',0
dosname dc.b 'dos.library',0
nardevice dc.b 'narrator.device',0
even
; requester texts
notfnd dc.b ' not found',0
hdtxt dc.b ' Say Request',0
OkTxt dc.b ' OK',0
even
title dc.b 'load file to SAY',0
even
filename ds.b 80
window dc.b 'CON:0/0/639/199/Say - abort with ^C',0
even
filehandle dc.l 0
narread ds.l 20
talkio ds.l 20
writerep ds.l 8
BufNum dc.l 0
BufPnt dc.l 0
Buffer ds.b 200
Buf2 ds.b 200
outtext ds.l $100
end