home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol235 / bctest.aqm / BCTEST.ASM
Encoding:
Assembly Source File  |  1986-02-10  |  5.3 KB  |  265 lines

  1. ;**************************************************
  2. ;
  3. ;        BASICODE TEST
  4. ;
  5. ;  DIT OPENBAAR PROGRAMMA MAG GECOPIEERD EN GEDISTRIBEERD
  6. ;  WORDEN,  MITS INHOUDENDE DE VOLGENDE COPYRIGHT NOTICE
  7. ;
  8. ;   "         DIT PROGRAMMA
  9. ;     BETREFFENDE EEN IMPLEMENTATIE VAN DE
  10. ;        NOS BASICODE
  11. ;
  12. ;   IS TER BESCHIKKING GESTELD DOOR DE
  13. ;    HOBBY COMPUTER CLUB (HOLLAND)      "
  14. ;
  15. ;
  16. ;  NOS     P.O. 1200     1200BE HILVERSUM    (HOBBYSCOOP)
  17. ;  HCC  P.O. 149    2250AC VOORSCHOTEN    (CP/M gg)
  18. ;
  19. ;   Implementatie:
  20. ;        Albert van der Horst
  21. ;    t.b.v.  FORTH gebruikersgroep (HCC)
  22. ;
  23. ;**************************************************
  24. ;
  25. ;  Test een bandje geschreven volgens het
  26. ;         BASICODE protocol
  27. ;  De sterretjes die op het scherm verschijnen,
  28. ;  moeten zo goed mogelijk onder elkaar komen.
  29. ;  Dit programma is waarschijnlijk niet goed aan 
  30. ;  te passen wanneer er geen memory mapped video is.
  31. ;
  32. ;**************************************************
  33. ;
  34. ;    Algemene opmerking:
  35. ;    Daar ook CP/M de registers van de Z80 niet
  36. ;    intact laat bij aanroepen naar het systeem,
  37. ;    is hier de regel aanhouden dat registers altijd
  38. ;    verpest worden door subroutines, tenzij anders
  39. ;    vermeld.
  40. ;
  41. ;*************************************************
  42.  
  43. ;------------- VERANDERLIJKE EQUATES ---------------
  44. ;
  45. ;     In het algemeen zal men voor ieder type computer
  46. ;       een verantwoorde keus moeten maken uit de volgende
  47. ;    opties, alsmede hardware adressen in moeten vullen.
  48. ;
  49. ; ASSEMBLER SWITCH      ALS HIJ 1 IS, BETEKENT HET DAT 
  50. MEMMAP    EQU 1    ; De Centronics poort is 'memory mapped'
  51. OSBRN    EQU 1    ; Speciaal voor OSBORNE: bank switching    
  52.  
  53. ; HARDWARE EQUATES
  54. PAPORT    EQU    2900H    ; Parallel port (memory mapped)
  55. SCREEN    EQU    0F000H    ; Memory mapped video screen
  56. DEL12    EQU    90    ; Delay loop voor '0' bit (4 MHz)
  57. DEL24    EQU    44    ; Delay loop voor '1' bit (4 MHz)
  58.  
  59. ;
  60. ;------------- VASTE EQUATES --------------------------------
  61.  
  62. BDOS    EQU    5H
  63. DMA    EQU    80H
  64. STX    EQU    02H
  65. ETX    EQU    03H
  66. LF    EQU    0AH
  67. CR    EQU    0DH
  68. CTRLZ    EQU    1AH    ; Control-Z
  69. FCB    EQU    5CH    ; Standaard file control block
  70.  
  71. ;-------------------------------------------------
  72.  
  73.     ORG    100H
  74.     CALL    PRINT
  75.  DB CTRLZ,LF,LF,LF,LF,LF,' ** CPM BASICODE TEST '
  76.  DB '**  RELEASE 1.0',CR,LF,LF,0
  77.  
  78.     JMP    STACK    
  79.  
  80. ;
  81. ; ================================================
  82. ;
  83.  
  84.     IF    NOT OSBRN    ; Normale situatie
  85.     DS    20H        ; Reserveer stack ruimte
  86.     ENDIF
  87.  
  88.     IF    OSBRN    ; Programma moet boven 4000H draaien
  89.     ORG    4020H    ; wegens Osborne bankswitching
  90.     ENDIF
  91.  
  92. STACK:    
  93.     LXI    H,STACK    ; Initialiseer stack
  94.     SPHL
  95.  
  96.     IF    OSBRN
  97.         CALL    BANK2
  98.        ENDIF
  99.  
  100. ; - - - - - INITIALISATIE - - - - - - - - - - - - 
  101. ;
  102. ;     Tellers gaan mis bij interrupts
  103.  
  104.     DI 
  105.  
  106. ; - - - - - TESTEN VAN INPUT SIGNAAL - - - - - - 
  107.  
  108.     LXI    H,PAPORT+2
  109. REP1:    CALL    BITPS
  110.     JZ    OUT1    ; Z: Timeout
  111. ;
  112. ; - - - - - BEREKEN NIEUW ADRES OP VIDEO PAG - - - - - -
  113.  
  114.     ANI    40H    ; 0 of 1 fase ingangssignaal?
  115.     RAL
  116.     RAL
  117.     RAL
  118.     ADI    0F0H    ; kies uit 1e of 3e regel
  119.     MOV    D,A
  120.  
  121. ; - - - - - WIS OUDE STERRETJE - - - - - - - - - -
  122.  
  123.     MVI    A,' '
  124.     STAX    B
  125.  
  126. ; - - - - - ZET NIEUW STERRETJE - - - - - - - - - 
  127.  
  128.     MOV    A,E        ; deel E door 2
  129.     RAR
  130.     MOV    E,A
  131.  
  132.     MOV    C,E
  133.     MOV    B,D
  134.     MVI    A,'*'
  135.     STAX    B
  136.     JMP    REP1
  137.  
  138. ; - - - - - AFBREKEN? - - - - - - - - - - - - 
  139. ;    ( OSBORNE :Schakel even terug naar de andere bank
  140. ;    Kijk of er een toets is ingedrukt,
  141. ;    dan ophouden.
  142.  
  143. OUT1:    
  144.     IF    OSBRN
  145.     CALL    BANK1
  146.     ENDIF
  147.  
  148.     CALL    KBD
  149.     PUSH    PSW
  150.  
  151.     IF    OSBRN
  152.     CALL    BANK2
  153.     ENDIF
  154.  
  155.     POP    PSW
  156.     JNC    REP1
  157.     CALL    BANK1
  158.     JMP    0    ; STOP
  159.  
  160. ;**************************************************
  161. ;
  162. ;     subroutine gebied
  163. ;
  164. ;**************************************************
  165. ;
  166. ;--------------  SWITCH NAAR BANK 2 -------------
  167. ;    
  168. ;  Zie OSBORNE User Guide 262 ( REV.12/15/82)
  169. ;  interrupts zijn al disabled!
  170. ;  En moeten dat blijven !
  171.                  
  172.     IF    OSBRN
  173. BANK2:    OUT    0
  174.     MVI    A,0
  175.     STA    0EF08H    
  176.     RET
  177.  
  178. ; -------------  SWITCH NAAR BANK 1 -------------  
  179. ;
  180. ;  Zie BANK2
  181.  
  182. BANK1:    OUT    1
  183.     MVI    A,1
  184.     STA    0EF08H    
  185.     RET
  186.     ENDIF
  187.  
  188.  
  189. ; - - - - - -  MEET LENGTE PERIODE - - - - - 
  190. ;
  191. ; Normaal ca. 23 perioden (1) of 46 (0) 
  192. ; Geeft gemeten lengte terug in E
  193. ; HL wijst al naar de poort
  194. ; Z bij return wijst op time-out
  195. ;
  196. BITPS:    MOV    A,M    ; Lees poort
  197.     MVI    E,0    ; Init teller
  198.  
  199. REP5:    INR    E    ; Meet lengte
  200.     RZ        ; Timeout
  201.     CMP    M    ; Veranderd?
  202.     JZ    REP5    ; Zo niet herhaal
  203.     RET
  204.  
  205. ; - - - - - - PRINT AN INLINE STRING - - - - - - - - - -
  206.  
  207. PRINT    POP    H    ; HAAL RETURN ADDRESS OP
  208.     MOV    A,M    ; GET CHARACTER
  209.     INX    H
  210.     ORA    A
  211.     JZ    END5
  212.     PUSH    H
  213.     CALL    CRT
  214.     JMP    PRINT
  215. END5    PCHL        ; RETURN
  216.  
  217.  
  218. ;=================================================
  219. ;
  220. ;            INTERFACING WITH CP/M
  221. ;            ---------------------
  222. ;
  223. ;=================================================
  224.  
  225. ;----------------  FUNKTIE SCAN FOR CHAR ----------------
  226. ;
  227. KBD    PUSH    H
  228.     PUSH    B
  229.     EI
  230.     MVI    C,0BH    ; Als de carry op staat is er een 
  231.     CALL    BDOS    ;  toets ingedrukt
  232.     ANI    1
  233.     JZ    NOCHAR
  234.     MVI    C,1
  235.     CALL    BDOS
  236.     STC
  237.     JMP    RETURN
  238. NOCHAR    XRA    A    ; Clear carry
  239. RETURN    POP    B
  240.     POP    H
  241.     DI
  242.     RET    
  243.  
  244. ;   zero flag : geen character ingetoetst
  245.  
  246. KEYBRD    PUSH    H
  247.     PUSH    B
  248.     MVI    C,0BH    
  249.     CALL    BDOS
  250.     ANI    1
  251.     POP    B
  252.     POP    H
  253.     RET    
  254.  
  255. ; -------------  FUNKTIE PRINT A CHAR ------------- - 
  256.    
  257. CRT    MOV    E,A    ; OUTPUTS 'A' IN ASCII
  258.     MVI    C,2    
  259.     CALL    BDOS    
  260.     RET
  261.  
  262.  
  263.  
  264.