view 3rdparty/packages/subsim/presub.asm @ 791:3f51208a2f6b

Added module
author boisy
date Sun, 12 Jan 2003 17:05:10 +0000
parents
children 8a74e490c334
line wrap: on
line source

         nam   sub
         ttl   startup program

* Disassembled 03/01/12 10:22:39 by Disasm v1.5 (C) 1988 by RML

         ifp1
         use   defsfile
         endc

tylg     set   Prgrm+Objct   
atrv     set   ReEnt+rev
rev      set   $01
edition  set   1

         mod   eom,name,tylg,atrv,start,size

u0000    rmb   2
u0002    rmb   8
u000A    rmb   3
u000D    rmb   19
u0020    rmb   83
u0073    rmb   311
size     equ   .

name     fcs   /sub/
*         fcb   edition

start    lds   #$0080
         leax  >CurOff,pcr
         lbsr  WriteTxt		turn cursor off
ShowMenu leax  >Menu,pcr
         lbsr  WriteTxt		show menu
         lbsr  Read1Chr		read char
         cmpa  #'1		is it 1?
         beq   DoCMP		branch if so
         cmpa  #'2		is it 2?
         beq   DoMONO		branch if so
         cmpa  #'3		is it 3?
         beq   DoRGB		branch if so
         leax  >Bell,pcr	else ring bell
         lbsr  WriteTxt
         bra   ShowMenu		and start over
DoCMP    ldx   #$0000		composite
         bra   SetMntr
DoMONO   ldx   #$0002		monochrome
         bra   SetMntr
DoRGB    ldx   #$0001		RGB
SetMntr  ldd   #($01*256)+SS.Montr
         os9   I$SetStt 	set monitor type
         leax  >SwapDisk,pcr	point to disk swap message
         lbsr  WriteTxt		write text
         lbsr  Read1Chr		read char
         leax  >CurOn,pcr
         lbsr  WriteTxt		turn on cursor
         leax  >NewDir,pcr
         lda   #EXEC.
         os9   I$ChgDir 	change directory
         bcc   L006C		branch if successful
L0069    os9   F$Exit   	else exit
L006C    ldb   #$0C		screen clear character
         stb   >$0186		store in buffer
         ldx   #$0186		point X to buffer
         ldy   #$0001		one byte
         lda   #$01		to stdout
         os9   I$Write  	write it!
         ldd   #$1100
         leax  >SubPrg,pcr
         ldy   #$0000
         ldu   #$0082
         os9   F$Chain  	chain to new program
         bcs   L0069		branch if error
         ldd   #$0000		code should never get here if chain worked!
         os9   F$Exit   

Read1Chr pshs  y,x,b		save regs
         clra  			standard input
         ldx   #$0186		point to input buffer
         ldy   #$0001		get 1 char
         os9   I$Read   	do it!
         lda   >$0186		get char at buffer ptr
         puls  pc,y,x,b		and return

* Write string routine
* Note: terribly ineffecient
WriteTxt pshs  y,b,a		save registers
NextByte ldb   ,x+		get byte at X
         beq   WritExit		branch if zero
         stb   >$0186		else save
         pshs  x,b,a		save registers again
         ldx   #$0186		point to buffer
         ldy   #$0001		1 char
         lda   #$01		to stdout
         os9   I$Write  	write it
         puls  x,b,a		pull registers
         bra   NextByte		go get next char
WritExit puls  pc,y,b,a		return

CurOff   fcb   $05,$20,$00
CurOn    fcb   $05,$21,$00
Menu     fcb   $0c,$02,$20,$22
         fcc   /WHAT TYPE OF DISPLAY DO YOU HAVE/
         fcb   C$LF,C$CR,C$LF,C$CR
         fcc   /    (1). Television/
         fcb   C$LF,C$CR,C$LF,C$CR
         fcc   /    (2). Monochrome Monitor/
         fcb   C$LF,C$CR,C$LF,C$CR
         fcc   /    (3). R.G.B. Monitor./
         fcb   0
SwapDisk fcb   $0C,$02,$23,$25
         fcc   /Insert side /
         fcb   $1f,$24,$32,$1f,$25
         fcc   / of diskette/
         fcb   C$LF,C$LF,C$CR
         fcc   / and press any key to continue/
         fcb   C$LF,C$LF,C$CR,00
Bell     fcb   C$BELL,$00
NewDir   fcc   !/d0/cmds!
         fcb   C$CR
SubPrg   fcc   /sub/
         fcb   C$CR

         emod
eom      equ   *
         end