home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / apple / pcpivers.azm / PCPIVERS.ASM
Encoding:
Assembly Source File  |  1987-02-07  |  6.8 KB  |  437 lines

  1. ; TIMERC.ASM
  2. ;  for PCPICPM
  3. ;        constant update display the time
  4. ;
  5. TRUE    EQU     0FFH
  6. FALSE    EQU     0
  7. acr    equ    0dh            ;A Carrage Return
  8. alf    equ    0ah            ;A Line Feed
  9. aesc    equ    1bh            ;An ESCAPE
  10. clrscrn equ    0ch            ;Clear screen (Apple //e)
  11. ;    
  12. SLOT    equ    2            ;VersaCard Slot #
  13. slot1    equ     slot*16+80h
  14. ctrlp    equ    0C002h+slot1
  15. dtap    equ    0C003h+slot1
  16. ;
  17. CHOUR:    EQU    043H    ;some BIOS clocks keep time
  18. CMIN:    EQU    044H    ;here anyway.
  19. LHOUR:    EQU    050H    ;set by STARTUP.COM on
  20. LMIN:    EQU    051H    ;system initailzation 
  21. ;
  22. sec01     equ    10h
  23. sec10    equ    11h
  24. min01    equ     12h
  25. min10     equ    13h
  26. hrs01    equ    14h
  27. hrs10    equ     15h
  28. day       equ    16h        ; 0=Sunday  6=Saturday
  29. dat01    equ    17h
  30. dat10    equ     18h
  31. mon01     equ    19h
  32. mon10    equ    1Ah
  33. yer01    equ     1Bh
  34. yer10     equ    1Ch
  35. ;
  36. ;    BASE - Base Address of user's CP/M system (normally 0 for DR version)
  37. BASE    EQU    0    ;BASE OF CP/M SYSTEM (SET FOR STANDARD CP/M)
  38. BDOS    EQU    BASE+0005H        ;BDOS FUNCTION CALL ENTRY PT
  39. keyhit    equ    0Bh            ;BDOS test console for key
  40. ;
  41. RDBYTE    EQU    0FFE0H    ;READ A BYTE FROM APPLE (A = BYTE)
  42. WRBYTE    EQU    0FFE3H    ;WRITE A BYTE TO APPLE (C = BYTE)
  43. RDWORD    EQU    0FFE6H    ;READ 2 BYTES FROM APPLE (DE = BYTES)
  44. WRWORD    EQU    0FFE9H    ;WRITE 2 BYTES TO APPLE (DE = BYTES)
  45. RDNBYTS    EQU    0FFECH    ;READ N BYTES (DE = COUNT, HL = BUFFER)
  46. WRNBYTS    EQU    0FFEFH    ;WRITE N BYTES (DE = COUNT, HL = BUFFER)
  47. ;
  48. PEEK1BYTE EQU    6    ; COMMAND TO PEEK 1 BYTE IN THE APPLE
  49. POKE1BYTE EQU    7    ; COMMAND TO POKE 1 BYTE IN THE APPLE
  50. ;
  51. *********************************************************************
  52.     org    0100h
  53. *********************************************************************
  54.     jmp    start
  55. ;
  56. date:
  57.     db    'Date - '
  58.     db    0
  59. ;
  60. time:
  61.     db    'Time - '
  62.     db    0
  63. ;
  64. ;
  65. hrs:
  66.     db     0
  67. min:
  68.     db     0
  69. ten:
  70.     db    0Ah    
  71. ;
  72. start:
  73. ;
  74.     mvi    a,alf
  75.     call    conout
  76.     mvi    a,alf
  77.     call    conout
  78. start1:
  79.     mvi     a,acr
  80.     call    conout
  81. ;
  82. ;            print three spaces
  83. ;
  84.     call     p3spaces
  85. ;
  86. ;            print the date
  87. ;
  88.     lxi    h,date  
  89.     call    PRINT
  90. ;
  91. ;            month tens digit
  92. ;
  93.     mvi    a,mon10
  94.     call    fetch
  95.     ani    0f1h
  96.     call     storeit
  97. ;
  98. ;            month units digit
  99. ;
  100.     mvi    a,mon01
  101.     call    fetch
  102.     call     storeit
  103. ;
  104. ;            seperator /
  105. ;
  106.     mvi    a,'/'
  107.     call    conout
  108.  
  109. ;
  110. ;            day tens digit
  111. ;
  112.     mvi    a,dat10
  113.     call    fetch
  114.     ani    0f3h
  115.     call     storeit
  116. ;
  117. ;            day units digit
  118. ;
  119.     mvi    a,dat01
  120.     call    fetch
  121.     call     storeit
  122. ;
  123. ;            seperator /
  124. ;
  125.     mvi    a,'/'
  126.     call    conout
  127.  
  128. ;
  129. ;            year tens digit
  130. ;
  131.     mvi    a,yer10
  132.     call    fetch
  133.     call     storeit
  134. ;
  135. ;            year units digit
  136. ;
  137.     mvi    a,yer01
  138.     call    fetch
  139.     call     storeit
  140. ;
  141. ;            print three spaces
  142. ;
  143.     call     p3spaces
  144. ;
  145. ;            print the time
  146. ;
  147.     lxi    h,time  
  148.     call    PRINT
  149. ;
  150. ;            hour tens digit
  151. ;
  152.     mvi    a,hrs10
  153.     call    fetch
  154.     ani    0f3h
  155.     call     storeit
  156. ;                setup timer routine
  157.     mvi    a,hrs10
  158.     call    fetch
  159.     ani    003h
  160.     mov    b,a        ;move #of tens to reg-B
  161.     mvi    a,0
  162.     sta    hrs        ;zero to start
  163.     mov    a,b
  164.     jz    endit
  165. mult0:
  166.     mvi    c,0Ah        ;put a ten in C
  167.     lda    hrs        ;put current hrs in A
  168.     add    C              ;add 10
  169.     sta    hrs          ;save it in hrs:
  170.     dcr    b
  171.     jnz    mult0
  172. endit:
  173.  
  174. ;
  175. ;            hour units digit
  176. ;
  177.     mvi    a,hrs01
  178.     call    fetch
  179.     call     storeit
  180. ;            setup timer routine
  181.     mvi    a,hrs01
  182.     call    fetch
  183.     ani    07h
  184.     mov    b,a
  185.     lda    hrs
  186.     mov    c,a
  187.     mov    a,b
  188.     add    c
  189.     sta    CHOUR 
  190. ;    sta    LHOUR 
  191. ;
  192. ;            seperator :
  193. ;
  194.     mvi    a,':'
  195.     call    conout
  196. ;
  197. ;            minute tens digit
  198. ;
  199.     mvi    a,min10
  200.     call    fetch
  201.     ani    0f7h
  202.     call     storeit
  203. ;                setup timer routine
  204.     mvi    a,min10
  205.     call    fetch
  206.     ani    007h
  207.     mov    b,a        ;move #of tens to reg-B
  208.     mvi    a,0
  209.     sta    min        ;zero to start
  210.     mov    a,b
  211.     jz    endit1
  212.     mvi    a,0    
  213. mult1:
  214.     mvi    c,0Ah        ;put a ten in C
  215.     lda    min        ;put current min in A
  216.     add    C              ;add 10
  217.     sta    min          ;save it in min:
  218.     dcr    b
  219.     jnz    mult1
  220. endit1:
  221. ;
  222. ;            minute units digit
  223. ;
  224.     mvi    a,min01
  225.     call    fetch
  226.     call     storeit
  227. ;            setup timer routine
  228.     mvi    a,min01
  229.     call    fetch
  230.     ani    0fh
  231.     mov    b,a
  232.     lda    min
  233.     mov    c,a
  234.     mov    a,b
  235.     add    c
  236.     sta    CMIN
  237. ;    sta    LMIN
  238. ;
  239. ;            seperator :
  240. ;
  241.     mvi    a,':'
  242.     call    conout
  243. ;
  244. ;            seconds tens digit
  245. ;
  246.     mvi    a,sec10
  247.     call    fetch
  248.     ani    0f7h
  249.     call     storeit
  250. ;
  251. ;            seconds units digit
  252. ;
  253.     mvi    a,sec01
  254.     call    fetch
  255.     call     storeit
  256. ;
  257. ;            print three spaces
  258. ;
  259.     call     p3spaces
  260. ;
  261. ;
  262. ;
  263. ;***********************************************************************
  264. ;
  265. ;        TIME0:  CALCULATE USER'S ELAPSED TIME
  266. ;
  267. ;***********************************************************************
  268. ;
  269. ; Calculate time on system and inform user.  
  270. ;
  271. TIME0:    NOP            ;the SYSOP must add the code here neces-
  272.     NOP            ;  sary to read his clock and store
  273.     NOP            ;  binary values of current hours (0-23)
  274.     NOP            ;  in CHOUR and minutes (0-59) in CMIN
  275.     LXI    H,LHOUR        ;point to log-on hour
  276.     LDA    CHOUR        ;current hour
  277.     CMP    M        ;equal?
  278.     JNZ    TIME1        ;no
  279.     LDA    LMIN        ;log on minutes
  280.     MOV    D,A
  281.     LDA    CMIN        ;current minutes
  282.     SUB    D
  283.     STA    TON        ;store total time on
  284.     JMP    TIME2
  285. ;
  286. TIME1:    LDA    LMIN        ;log on min
  287.     MOV    D,A
  288.     MVI    A,03CH        ;60 min into A
  289.     SUB    D
  290.     LXI    H,CMIN        ;point at current min
  291.     ADD    M        ;add current minutes
  292.     STA    TON
  293. ;
  294. TIME2:    
  295. ;
  296. TIME3:    LXI    H,MSG1+015H    ;point at message insert bytes
  297.     LDA    TON        ;convert to ASCII
  298.     MVI    B,-1
  299. ;
  300. TIME4:    INR    B
  301.     SUI    0AH        ;subtract 10
  302.     JNC    TIME4        ;until done
  303.     ADI    0AH
  304.     ORI    '0'        ;make ASCII
  305.     MOV    M,A
  306.     DCX    H
  307.     MVI    A,'0'
  308.     ADD    B
  309.     MOV    M,A
  310.     LXI    H,MSG1
  311.     CALL    PRINT
  312. ;
  313. ;
  314.     mvi    c,keyhit
  315.     call    BDOS        ;test the console
  316.     ora    a        ;was a key hit
  317.     jz    wait           ;jump if not
  318. ;
  319.     mvi    a,alf
  320.     call    conout
  321.     mvi    a,alf
  322.     call    conout
  323.     mvi     a,acr
  324.     call    conout
  325. ;
  326.     ret
  327. ;
  328. ;
  329. ;
  330. MSG1:
  331.     DB    '  '
  332.     DB    'Time on system is 00 minutes'
  333.     DB    0
  334. ;
  335. ;
  336. TON:
  337.     DB    0            
  338. ;
  339. ;-----------------------------------------------------------------------
  340. ;
  341. ;            End of program code
  342. ;
  343. ;-----------------------------------------------------------------------
  344. ;
  345. ;
  346. ;
  347. ;       S U B     R O U T I N E S:
  348. ;
  349. ;PEEK AT 1 BYTE IN THE APPLE
  350. ;ENTRY: DE = ADDRESS
  351. ;EXIT:    A = DATA
  352. PEEK:
  353.     PUSH    B
  354.     MVI    C,PEEK1BYTE
  355.     CALL    WRBYTE
  356.     CALL    WRWORD
  357.     CALL    RDBYTE
  358.     POP    B
  359.     RET
  360.  
  361. ;POKE 1 BYTE INTO THE APPLE
  362. ;ENTRY: DE = ADDRESS
  363. ;EXIT:    A = DATA
  364. POKE:
  365.     PUSH    B
  366.     MOV    B,A
  367.     MVI    C,POKE1BYTE
  368.     CALL    WRBYTE
  369.     CALL    WRWORD
  370.     MOV    C,B
  371.     CALL    WRBYTE
  372.     POP    B
  373.     RET
  374. ;
  375. ;
  376. fetch:
  377.     lxi    d,ctrlp
  378.     call    poke
  379.     lxi    d,dtap
  380.     call    peek
  381.     sui    10h
  382.     ret
  383. ;
  384. storeit:
  385.     call     conout
  386.     ret
  387. ;
  388. cout:
  389. CONOUT:
  390.     MVI    C,2
  391. OUTPUT:
  392.     MOV    E,A
  393.     CALL    BDOS
  394.     RET
  395. ;
  396. ;            print three spaces
  397. ;
  398. p3spaces:
  399.     mvi    a,' ' 
  400.     call    conout
  401.     mvi    a,' ' 
  402.     call    conout
  403.     mvi    a,' ' 
  404.     call    conout
  405.     ret
  406. ;
  407. PRINT: 
  408.     mov    a,m        ;get a character of the message
  409.     inx    h        ;Bump text pointer
  410.     ana    a        ;Test for End
  411.     jz    done          ;Exit if done
  412.     push    h        ;Save pointer to text
  413.     mov    c,a        ;Output char in C
  414.     call     cout        ;output the character
  415.     pop    h         ;restore the pointer
  416.     jmp    PRINT          ;Continue untill null reached
  417. ;
  418. done:
  419.     RET
  420. ;
  421. wait:
  422.     mvi     b,006h
  423. wait1:
  424.     mvi    c,0FFh
  425. wait2:
  426.     mvi    d,0FFh
  427. wait3:
  428.     dcr    d
  429.     jnz    wait3
  430.     dcr    c
  431.     jnz    wait2
  432.     dcr    b
  433.     jnz    wait1
  434.     jmp    start1
  435. ;
  436.