home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
apple
/
thunder.azm
/
THUNDER.ASM
Wrap
Assembly Source File
|
1988-01-02
|
4KB
|
93 lines
* Program Generated 1 August 1982
* Author Michael W. Foley
* With assist from Jim Moore using a program originaly written for the
* Promethious multifunction card, for the Apple ][.
*
*
* This program will allow you to use a Thunderclock from Apple CP/M.
* The only equate that needs to be changed for your Apple is the location
* of the Slot of the Thunderclock.
* This is set into two of the equates both A$CKW for a write to the clock
* and A$CKR for a read from the clock, as CNxx, where N is your slot #.
*
* The program at the bottom of the assembler routines is an example of a
* clock data read program to use if you are going to use a MBASIC program
* to obtain the clock data from the GETLN Buffer area of the Apple. It
* can be implimented as a subroutine in your program.
*
;**** Equates ****
;
FALSE EQU 00H ; define true and false for conditional assembly
TRUE EQU NOT FALSE ; true = FFFFH
BASIC EQU FALSE ; set to true if using this as a asm subroutine
; called from a Mbasic program.
;
BDOS EQU 05H ; CP/M Bdos call address
Z$CPU EQU 0F3DEH ; Address of Softcard found here
A$VEC EQU 0F3D0H ; 6502 subroutine address goes here
A$ACC EQU 0F045H ; 6502 accumulator pass area for data
;
;
A$CKW EQU 0C50BH ; Clock dependent call address for write
;
;
A$CKR EQU 0C508H ; Clock dependent call address for read
;
Z$TMB EQU 0F201H ; start of the GETLN BUFFER
;
; Character string length from Thunderclock
Z$FML EQU 019H ; 25 characters total length
;
; Format character to write to the clock
Z$FMT EQU '>' ; AP/PM format.
;
;
ORG 0100H ; Put this where you want it, here for TPA
MVI A,Z$FMT ; get the format character in accumulator
STA A$ACC ; pass it to the 6502 Accumulator at $45
LXI H,A$CKW ; Set up for clock write to set format
SHLD A$VEC ; Tell the 6502 where the subroutine is
LHLD Z$CPU ; get the Softcard address
MOV M,A ; call the 6502 subroutine
; 6502 returns here after setting the proper format
; on the clock
LXI H,A$CKR ; Set up for clock read
SHLD A$VEC ; Tell the 6502 where the subroutine is
LHLD Z$CPU ; get the Softcard return address
MOV M,A ; call the 6502 subroutine for clock read
; conditional assembly depending on if you want to
; allow the asm subroutine
; to print the time string to the console or use a
; Mbasic routine to strip
; the characters out of memory via peeks and string
; concat routines.
IF BASIC ; if you are going to use a Mbasic routine set
; the BASIC equate to TRUE.
RET ; Return to basic caller
ENDIF ; Basic is being used to obtain characters
;
IF NOT BASIC ; don't assemble if not needed
MVI A,'$' ; prepare to concat this onto the end of the string
; due to Bdos expecting it as an end of string marker.
STA Z$TMB+Z$FML+1 ; concat to the end of the string
MVI C,09H ; Set up to call Bdos string printing routine
LXI D,Z$TMB ; point to the beginning of the GETLN buffer
; begin the read at this point.
CALL BDOS ; write the GETLN buffer to the console device for
; the length of characters output by the clock.
RET ; back to the caller
ENDIF ; not basic caller
END ; of this program for the Thunderclock + for the
*
* MBASIC ROUTINES TO READ THE THUNDERCLOCK DATE TIME STRING FROM MEMORY
*
* 10 FML = &H19 'Length of clock character string
* 20 DG$ = " " 'Character to clear the time
* 30 FOR X = &H201 th &H201+FML 'Loop to get characters
* 40 DG$ = DG$ + CHR$(PEEK(X)) 'One charater at a time
* 50 NEXT I
* 60 ' Now DG$ holds the time form the Thunderclock
*
* Now you can use the MBASIC MID$ function to get the data you
* want from the Thunderclocks time string.