Per Mårtensson 1 rok temu
rodzic
commit
ea7f76199b
59 zmienionych plików z 4218 dodań i 0 usunięć
  1. 74 0
      PC/PC4680/PC4680-filelist.txt
  2. BIN
      PC/PC4680/PC4680.hfe
  3. BIN
      PC/PC4680/PC4680.img
  4. 28 0
      PC/PC4680/PC4680.txt
  5. 35 0
      PC/PC4680/PC4680/ALARM.ASM
  6. 49 0
      PC/PC4680/PC4680/AMP4083.BAS
  7. 40 0
      PC/PC4680/PC4680/AMP4084.BAS
  8. 40 0
      PC/PC4680/PC4680/ANASTYR.BAS
  9. 36 0
      PC/PC4680/PC4680/CLIVEKT.ASM
  10. 47 0
      PC/PC4680/PC4680/CLOCKINT.ASM
  11. 24 0
      PC/PC4680/PC4680/DBINT.ASM
  12. 190 0
      PC/PC4680/PC4680/DBTIME.BAS
  13. BIN
      PC/PC4680/PC4680/DBTIME.EXE
  14. 58 0
      PC/PC4680/PC4680/DECBIN.BAS
  15. 19 0
      PC/PC4680/PC4680/DISPINT.ASM
  16. 14 0
      PC/PC4680/PC4680/GET.ASM
  17. 53 0
      PC/PC4680/PC4680/GET1.ASM
  18. 53 0
      PC/PC4680/PC4680/GET2.ASM
  19. 8 0
      PC/PC4680/PC4680/INITINT.ASM
  20. 36 0
      PC/PC4680/PC4680/INT4085.BAS
  21. 29 0
      PC/PC4680/PC4680/INTTABLE.ASM
  22. 37 0
      PC/PC4680/PC4680/INTVEKT.ASM
  23. 109 0
      PC/PC4680/PC4680/INT_ATCO.ASM
  24. BIN
      PC/PC4680/PC4680/INT_ATCO.EXE
  25. 678 0
      PC/PC4680/PC4680/INT_ATCO.LST
  26. 108 0
      PC/PC4680/PC4680/INT_ATMO.ASM
  27. BIN
      PC/PC4680/PC4680/INT_ATMO.EXE
  28. 622 0
      PC/PC4680/PC4680/INT_ATMO.LST
  29. 113 0
      PC/PC4680/PC4680/INT_XT.ASM
  30. BIN
      PC/PC4680/PC4680/INT_XT.EXE
  31. 625 0
      PC/PC4680/PC4680/INT_XT.LST
  32. 58 0
      PC/PC4680/PC4680/LAS4008.BAS
  33. 41 0
      PC/PC4680/PC4680/LAS4085.BAS
  34. 42 0
      PC/PC4680/PC4680/LASIN.BAS
  35. 29 0
      PC/PC4680/PC4680/LASTUM.BAS
  36. 51 0
      PC/PC4680/PC4680/MOT4014.BAS
  37. 18 0
      PC/PC4680/PC4680/NOLEGINT.ASM
  38. 0 0
      PC/PC4680/PC4680/PC4680
  39. 66 0
      PC/PC4680/PC4680/PCTIME.BAS
  40. BIN
      PC/PC4680/PC4680/PCTIME.EXE
  41. 28 0
      PC/PC4680/PC4680/PERIOD.ASM
  42. 18 0
      PC/PC4680/PC4680/RESIN.ASM
  43. 47 0
      PC/PC4680/PC4680/RINN4006.BAS
  44. 31 0
      PC/PC4680/PC4680/RINN4013.BAS
  45. 28 0
      PC/PC4680/PC4680/RINN4095.BAS
  46. 28 0
      PC/PC4680/PC4680/RINN4103.BAS
  47. 14 0
      PC/PC4680/PC4680/SET.ASM
  48. 51 0
      PC/PC4680/PC4680/SET1.ASM
  49. 51 0
      PC/PC4680/PC4680/SET2.ASM
  50. 11 0
      PC/PC4680/PC4680/SETKEY.BAS
  51. 38 0
      PC/PC4680/PC4680/SIN4083.BAS
  52. 112 0
      PC/PC4680/PC4680/STEP4066.BAS
  53. 34 0
      PC/PC4680/PC4680/STYR4085.BAS
  54. 52 0
      PC/PC4680/PC4680/STYRUT.BAS
  55. 65 0
      PC/PC4680/PC4680/SWIR4013.BAS
  56. 44 0
      PC/PC4680/PC4680/TEXT4117.BAS
  57. 49 0
      PC/PC4680/PC4680/VOLT4083.BAS
  58. 40 0
      PC/PC4680/PC4680/VOLT4084.BAS
  59. 47 0
      PC/PC4680/PC4680/VOLT4115.BAS

+ 74 - 0
PC/PC4680/PC4680-filelist.txt

@@ -0,0 +1,74 @@
+Scanning the drive for archives:
+1 file, 368640 bytes (360 KiB)
+
+Listing archive: PC4680.img
+
+--
+Path = PC4680.img
+Type = FAT
+Physical Size = 368640
+File System = FAT12
+Cluster Size = 1024
+Free Space = 131072
+Headers Size = 6144
+Sector Size = 512
+
+   Date      Time    Attr         Size   Compressed  Name
+------------------- ----- ------------ ------------  ------------------------
+1980-01-01 00:49:44 ....A            0            0  PC4680
+1980-01-01 00:14:46 ....A         1596         2048  STYRUT.BAS
+1980-01-01 00:17:30 ....A         1198         2048  LASIN.BAS
+1980-01-01 00:19:32 ....A          719         1024  LASTUM.BAS
+1980-01-01 00:21:32 ....A         1424         2048  RINN4006.BAS
+1980-01-01 00:22:40 ....A         1200         2048  ANASTYR.BAS
+1980-01-01 00:34:28 ....A         1657         2048  DECBIN.BAS
+1985-01-25 11:29:52 ....A          704         1024  RINN4095.BAS
+1985-01-25 11:32:08 ....A         1641         2048  LAS4008.BAS
+1980-01-01 00:08:18 ....A          987         1024  STYR4085.BAS
+1980-01-01 00:13:54 ....A         1320         2048  LAS4085.BAS
+1980-01-01 00:16:42 ....A         1032         2048  INT4085.BAS
+1980-01-01 00:18:30 ....A          781         1024  RINN4103.BAS
+1980-01-01 00:21:44 ....A         1688         2048  AMP4083.BAS
+1980-01-01 00:23:58 ....A         1675         2048  VOLT4083.BAS
+1980-01-01 00:28:00 ....A         1465         2048  SIN4083.BAS
+1980-01-01 00:30:04 ....A         1342         2048  AMP4084.BAS
+1980-01-01 00:31:54 ....A         1335         2048  VOLT4084.BAS
+1985-05-10 06:16:28 ....A         1220         2048  RINN4013.BAS
+1985-05-10 06:16:04 ....A         2241         3072  SWIR4013.BAS
+1986-02-04 13:44:30 ....A         1746         2048  VOLT4115.BAS
+1985-05-10 06:17:32 ....A         1498         2048  MOT4014.BAS
+1985-05-10 06:18:04 ....A         3492         4096  STEP4066.BAS
+1985-05-10 06:18:38 ....A         1512         2048  TEXT4117.BAS
+1985-04-16 09:03:10 ....A         1815         2048  PCTIME.BAS
+1985-10-28 17:39:36 ....A         6121         6144  DBTIME.BAS
+1985-10-28 18:35:06 ....A        28202        28672  PCTIME.EXE
+1985-10-28 18:32:32 ....A        31568        31744  DBTIME.EXE
+1985-06-28 09:11:32 ....A          194         1024  SETKEY.BAS
+1986-06-05 14:06:18 ....A         3296         4096  INT_ATCO.EXE
+1986-06-05 14:06:08 ....A         3248         4096  INT_ATMO.EXE
+1986-02-26 15:04:16 ....A         3264         4096  INT_XT.EXE
+1986-06-05 14:04:28 ....A         1669         2048  INT_ATMO.ASM
+1986-05-29 14:23:26 ....A        25347        25600  INT_XT.LST
+1986-06-05 13:52:58 ....A         1680         2048  INT_ATCO.ASM
+1986-04-18 13:06:00 ....A         1741         2048  INT_XT.ASM
+1985-10-27 16:49:18 ....A          532         1024  ALARM.ASM
+1985-10-22 19:43:58 ....A          701         1024  CLOCKINT.ASM
+1985-10-24 17:55:40 ....A          366         1024  DISPINT.ASM
+1985-10-24 20:14:22 ....A          446         1024  PERIOD.ASM
+1986-09-04 16:27:54 ....A          214         1024  GET.ASM
+1986-09-04 16:29:38 ....A          213         1024  SET.ASM
+1985-10-27 16:07:22 ....A          558         1024  INTVEKT.ASM
+1985-10-18 15:19:50 ....A          536         1024  INTTABLE.ASM
+1985-08-30 10:38:18 ....A           99         1024  INITINT.ASM
+1985-10-18 15:20:36 ....A          343         1024  RESIN.ASM
+1986-02-07 10:27:38 ....A          421         1024  DBINT.ASM
+1985-11-12 12:01:32 ....A          584         1024  CLIVEKT.ASM
+1986-02-07 10:28:06 ....A          375         1024  NOLEGINT.ASM
+1986-06-05 14:05:34 ....A        25167        25600  INT_ATMO.LST
+1986-06-05 14:05:02 ....A        27727        28672  INT_ATCO.LST
+1986-08-22 16:44:06 ....A          804         1024  SET1.ASM
+1986-08-22 16:47:30 ....A          832         1024  GET1.ASM
+1986-09-04 13:02:00 ....A          783         1024  SET2.ASM
+1986-09-04 13:01:20 ....A          813         1024  GET2.ASM
+------------------- ----- ------------ ------------  ------------------------
+1986-09-04 16:29:38             203132       231424  55 files

BIN
PC/PC4680/PC4680.hfe


BIN
PC/PC4680/PC4680.img


+ 28 - 0
PC/PC4680/PC4680.txt

@@ -0,0 +1,28 @@
+
+7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
+p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,32 CPUs AMD Ryzen 7 3700X 8-Core Processor              (870F10),ASM,AES-NI)
+
+Scanning the drive for archives:
+1 file, 368640 bytes (360 KiB)
+
+Extracting archive: PC4680.img
+--
+Path = PC4680.img
+Type = FAT
+Physical Size = 368640
+File System = FAT12
+Cluster Size = 1024
+Free Space = 131072
+Headers Size = 6144
+Sector Size = 512
+
+
+Would you like to replace the existing file:
+  Path:     ./PC4680
+  Size:     0 bytes
+  Modified: 2024-01-04 18:12:03
+with the file from archive:
+  Path:     PC4680
+  Size:     0 bytes
+  Modified: 1980-01-01 00:49:44
+? (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? 

+ 35 - 0
PC/PC4680/PC4680/ALARM.ASM

@@ -0,0 +1,35 @@
+;---------- ALARM ---------------------------------------------
+;
+;  Routine for alarminterrupt from clock
+;
+;  CX,DI,SI changed
+;
+;--------------------------------------------------------------
+;
+alarm	proc near
+		lea si,ala_str
+		mov di,310
+		mov cx,10
+		call dispint
+		push ax
+		in al,61h
+		or al,03h
+		out 61h,al
+		push ax
+		mov ax,2000h
+loopa:	push ax
+		pop ax
+		push ax
+		pop ax
+		dec ax
+		jnz loopa
+		pop ax
+		and al,0FCh
+		out 61h,al
+		pop ax
+		ret
+;
+ala_str:	db 'ALARM'
+;
+alarm	endp
+

+ 49 - 0
PC/PC4680/PC4680/AMP4083.BAS

@@ -0,0 +1,49 @@
+10 ' Amp4083.bas  P-J H”gfeldt  850208
+20 ' Kap 4.1 sid 68 ex 1
+30 ' Styr str”mmen p† vald kanal p† D/A-kortet 4083
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,9 ' Kortval
+70 CLS
+80 '
+90 WHILE VALDKANAL%<>9 ' Sluta med en 9
+100   '
+110   PRINT "V„lj kanal 1-2, 9=slut";:INPUT VALDKANAL%
+120   IF VALDKANAL%=9 THEN GOTO 300
+130   IF VALDKANAL%<1 OR VALDKANAL%>2 THEN GOTO 110
+140   '
+150   PRINT "V„lj antal mA 0-20";:INPUT MAMPERE
+160   IF MAMPERE<0 OR MAMPERE>20 THEN GOTO 150
+170   '
+180   UT%=4095/10*MAMPERE/2 ' Omr„kning
+190   '
+200   IF VALDKANAL%=2 THEN 260
+210   ' Kanal 1
+220   OUT &H300,UT% AND &HFF ' L„gsta 8 bitar
+230   OUT &H302,UT%\&H100 ' H”gsta 4 bitar
+240   GOTO 290
+250   '
+260   ' Kanal 2
+270   OUT &H303,UT% AND &HFF ' L„gsta 8 bitar
+280   OUT &H304,UT%\&H100 ' H”gsta 4 bitar
+290   PRINT
+300 WEND
+310 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 50    Nollst„ller alla I/O-kort.
+1050 ' 60    V„ljer kort 4083 som h„r har adress 9.
+1060 ' 90    Loopar tills du v„ljer kanal 9.
+1070 ' 110   V„lj kanal.
+1080 ' 150   V„lj mAmpere.
+1090 ' 180   Formel som r„knar om avgivet antal mAmpere till utdata.
+1100 '       Vi beh”ver ej omvandla till heltal eftersom resultatet alltid blir
+1110 '       l„gre „n eller lika med 4095 (&H0FFF).
+1120 ' 200   Kanalval 1 f”rts„tter, kanal 2 hoppar.
+1130 ' 220   Maskar de 8 l„gsta bitarna och skickar dem p† kanal 1.
+1140 ' 230   Heltalsdivision med &H100 ger de 8 h”gsta bitarna till resultat,
+1150 '       varav de fyra h”gsta alltid „r nollst„llda fr†n formeln (rad 180).
+1160 ' 270-280 Skicka data till kanal 2, se ovan.
+

+ 40 - 0
PC/PC4680/PC4680/AMP4084.BAS

@@ -0,0 +1,40 @@
+10 ' Amp4084.bas  P-J H”gfeldt  850212
+20 ' Kap 4.1 sid 73 ex 7
+30 ' Styr str”mmen p† vald kanal med D/A-kortet 4084
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,10 ' Kortval
+70 CLS
+80 '
+90 WHILE VALDKANAL%<>9 ' Sluta med en 9
+100   '
+110   PRINT "V„lj kanal 1-4, 9=slut";:INPUT VALDKANAL%
+120   IF VALDKANAL%=9 THEN GOTO 230
+130   IF VALDKANAL%<1 OR VALDKANAL%>4 THEN GOTO 110
+140   IF VALDKANAL%=1 THEN VALDKANAL%=0 ' Se rad 210
+150   '
+160   PRINT "V„lj antal mA 0-20";:INPUT MAMPERE
+170   IF MAMPERE<0 OR MAMPERE>20 THEN GOTO 160
+180   '
+190   UT%=255/10*MAMPERE/2 ' Omr„kning
+200   '
+210   OUT &H300+VALDKANAL%,UT% ' Skicka de †tta bitarna till vald kanal.
+220   '
+230   PRINT
+240 WEND
+250 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 50    Nollst„ller alla I/O-kort.
+1050 ' 60    V„ljer kort 4084 som h„r har adress 10.
+1060 ' 90    Loopar tills du v„ljer kanal 9.
+1070 ' 110   V„lj kanal.
+1080 ' 140   F”r att p† rad 210 kunna skriva OUT &H300+VALDKANAL%.
+1090 ' 160   V„lj mAmpere.
+1100 ' 190   Formel som r„knar om avgivet antal mAmpere till utdata.
+1110 '       Vi beh”ver ej omvandla till heltal eftersom resultatet alltid blir
+1120 '       l„gre „n eller lika med 255 (&HFF).
+1130 ' 210   Skickar talet (0 till 255) p† vald kanal.
+

+ 40 - 0
PC/PC4680/PC4680/ANASTYR.BAS

@@ -0,0 +1,40 @@
+10 ' Anastyr.bas  /Datum P-J H”gfeldt  850123
+20 ' Kap 3.1 Ex 3 sid 34
+30 ' STYRNING AV ANALOG SPŽNNING
+40 '
+50 ' Funktion f”r omvandling till heltal
+60 '
+70 DEF FNHELTAL%(FLYT)=FLYT-65536!
+80 '
+100 ' HUVUDPROGRAMMET
+110 '
+200 Z=INP(&H307) ' NOLLSTŽLL KORTEN
+210 '
+220 CLS
+230 PRINT "STYRNING AV ANALOG SPŽNNING"
+240 PRINT :PRINT "St„ll in tumhjulen i ”nskat l„ge och tryck p† RETURN ";
+250 INPUT Z$
+260 '
+270 WHILE -1 ' O„ndlig loop, avbryt med ctrl-break
+280  '
+290  ' AVLŽSNING AV TUMHJULEN
+300  '
+310  OUT &H301,4 ' V„ljer kort med adress 4, grupp 1=tumhjul ental
+320  ENTAL%=INP(&H300) AND &HF ' L„s grupp 1 (0-3), ental
+330  '
+340  OUT &H301,&H84 ' V„lj kort med adress 4, grupp 2=tumhjul tiondel
+350  TIONDEL%=INP(&H300) AND &HF ' L„s grupp 2 (8-11), tiondelar
+360  '
+370  SPANNING$=STR$(ENTAL%)+"."+STR$(TIONDEL%)
+380  SPANNING=VAL(SPANNING$) ' 0 - 9.9 volt
+390  '
+400  ' SKRIV UTSPŽNNING
+410  '
+420  OUT &H301,3 ' V„lj D/A-kortet 4083
+430  UT=SPANNING*4095/10
+440  IF UT>32767 THEN UT%=FNHELTAL%(UT) ELSE UT%=UT ' Konvertera
+450  OUT &H300,UT% AND &HFF ' Skicka l†ga delen till grupp 1
+460  OUT &H302,UT%\256 ' H”ga delen till grupp 2
+470  '
+480 WEND
+

+ 36 - 0
PC/PC4680/PC4680/CLIVEKT.ASM

@@ -0,0 +1,36 @@
+;--------- CLIVEKT -------------------------------------
+;
+;  DX=PC4680 base adress
+;
+;  Interrupt routine call select for clock interrupts
+;
+;-------------------------------------------------------
+;
+clivekt	proc near
+		mov ah,0Bh
+		call get
+		mov al,cl
+		or al,8Fh
+		push ax
+		mov ah,0Ch
+		call get
+		pop ax
+		and cl,al
+		mov bx,cx
+IRQF:	test cl,80h
+		jz exit
+PF:		test cl,40h
+		jz AF
+		call period
+		mov cx,bx
+AF:   	test cl,20h
+		jz UF
+		call alarm
+		mov cx,bx
+UF: 		test cl,10h
+		jz exit
+		call clockint
+exit:	mov cx,bx
+     	ret
+clivekt	endp
+

+ 47 - 0
PC/PC4680/PC4680/CLOCKINT.ASM

@@ -0,0 +1,47 @@
+;------------ CLOCKINT ----------------------------------------
+;
+; DX=PC4680 base adress
+;
+;  AX,CX,DI,SI changed
+;
+;--------------------------------------------------------------
+clockint	proc near
+		lea si,cli_str
+		mov di,90h
+		mov cx,10h
+		push si
+		push cx
+		add si,0Eh
+		mov ah,00h
+next:	call get
+		mov ch,cl
+		and cx,0F00Fh
+		ror ch,1
+		ror ch,1
+		ror ch,1
+		ror ch,1
+		add cx,3030h
+		mov cs:[si],cl
+		dec si
+		dec si
+		mov cs:[si],ch
+		dec si
+		dec si
+		test ah,4
+		jnz display
+		inc ah
+		inc ah
+		mov al,3Ah
+		mov cs:[si],al
+		dec si
+		dec si
+		jmp next
+display:	pop cx
+		pop si
+		call dispint
+		ret
+;
+cli_str: 	dw 8 dup (' ')
+;
+clockint	endp
+

+ 24 - 0
PC/PC4680/PC4680/DBINT.ASM

@@ -0,0 +1,24 @@
+;------------ DBINT ------------------------------------------
+;
+;  DX=PC4680 base adress
+;
+;  CX,DI,SI changed
+;
+;-------------------------------------------------------------
+dbint	proc near
+		lea si,dbi_str
+		mov di,0038
+		mov cx,44
+		call dispint
+		push ax
+		push dx
+		mov dx,0307h
+		in al,(dx)
+		pop dx
+		pop ax
+		ret
+;
+dbi_str:	db 'Interrupt on DataBoard'
+;
+dbint	endp
+

+ 190 - 0
PC/PC4680/PC4680/DBTIME.BAS

@@ -0,0 +1,190 @@
+10 ' SAVE"DBTIME",A
+20 ' DBTIME  P-J H™GFELDT 850611
+30 ' Programmet st„ller klockan p† PC 4680 och initierar interrupt.
+40 ' Periodic-, Alarm-, samt Update-interrupt kan s„ttas.
+50 '
+55 CLS : PRINT "DBTIME startar"
+60 ' Testa s† att VRT=1
+70 '
+80 ADRESS=&HD : GOSUB 5500
+90 IF CDATA>127 THEN 140
+100 ' VRT=0 , Str”mmen till klockan har g†tt ned.
+110 PRINT "Klockan inneh†ller inte n†gon giltig tid!"
+120 PRINT "Tryck return s† kan du st„lla den. ";: INPUT SLASK$
+130 GOTO 550 ' St„ll klockan
+140 '
+150 ' L„s av klockan.
+160 '
+170 ADRESS=&HA : GOSUB 5500
+180 WHILE (CDATA AND &H80)=&H80 ' V„nta tills UIP=0
+190   GOSUB 5500
+200 WEND
+210 '
+220 ADRESS=9 : A$="" : MELLAN$="-"
+230 WHILE ADRESS>=0
+240   GOSUB 5500
+250   THIGH=(CDATA AND &HF0)/16
+260   TLOW=CDATA AND &HF
+270   A$=A$+CHR$(THIGH+&H30)+CHR$(TLOW+&H30)+MELLAN$
+280   IF ADRESS<7 THEN ADRESS=ADRESS-2 : MELLAN$=":" ELSE ADRESS=ADRESS-1
+290 WEND
+300 '
+310 ON ERROR GOTO 336
+320 TIME$=MID$(A$,13,8)
+330 DATE$=MID$(A$,4,3)+MID$(A$,7,3)+MID$(DATE$,7,2)+LEFT$(A$,2)
+334 ON ERROR GOTO 0 : GOTO 350
+336 PRINT "Klockan inneh†ller inte n†gon giltig tid!" : RESUME 550
+340 '
+350 ' MENY
+360 '
+370 CLS : PRINT TIME$ TAB(10) DATE$
+380 '
+390 LOCATE 4,1
+400 PRINT "0. Avsluta"
+410 PRINT "1. St„ll klockan"
+420 PRINT "2. S„tt Periodic interrupt"
+430 PRINT "3. S„tt Alarm interrupt"
+440 PRINT "4. S„tt Update interrupt"
+450 LOCATE 10,1
+460 INPUT "V„lj alternativ? ",ALT
+470 IF ALT<0 OR ALT>4 THEN 450
+490 ON ALT+1 GOTO 510,540,1000,1500,2000
+500 '
+510 ' Avsluta
+520 '
+530 END
+540 '
+550 ' St„ll klockan
+560 '
+570 LOCATE 14,1: INPUT "Ange datum p† formen ��MMDD:",DATUM$
+580 IF LEN(DATUM$)<>6 THEN PRINT CHR$(7) : GOTO 570
+590 LOCATE 15,1 : INPUT "Ange veckodagsnummer 1-7 d„r 1=s”ndag:",DAG$
+600 IF DAG$<"1" OR DAG$>"7" OR LEN(DAG$)<>1 THEN PRINT CHR$(7);: GOTO 590
+610 LOCATE 16,1 : INPUT "Ange tid p† formen TTMMSS:",TID$
+620 IF LEN(TID$)<>6 THEN PRINT CHR$(7) : GOTO 610
+630 '
+640 FOR ADRESS=9 TO 7 STEP -1 ' Datumet
+650   T$=LEFT$(RIGHT$(DATUM$,(ADRESS-6)*2),2)
+660   A1%=ASC(LEFT$(T$,1))-&H30 ' Low
+670   A2%=ASC(RIGHT$(T$,1))-&H30 ' High
+680   ADR%(ADRESS)=A2%+(A1%*&H10) ' Spara i vektorn
+690 NEXT ADRESS
+700 '
+710 ADR%(6)=ASC(DAG$)-&H30 ' Dagnr
+720 '
+730 FOR ADRESS=4 TO 0 STEP -2 ' Tiden
+740   T$=LEFT$(RIGHT$(TID$,ADRESS+2),2)
+750   A1%=ASC(LEFT$(T$,1))-&H30 ' Low
+760   A2%=ASC(RIGHT$(T$,1))-&H30 ' High
+770   ADR%(ADRESS)=A2%+(A1%*&H10) ' Spara i vektorn
+780 NEXT ADRESS
+790 '
+800 ADR%(6)=1 : ADR%(5)=255 : ADR%(3)=255 : ADR%(1)=&H5
+810 '
+820 ADRESS=&HB : CDATA=&H82 : GOSUB 5000 ' SET=1
+830 ADRESS=&HA : CDATA=&H70 : GOSUB 5000 ' DV0,DV1,DV2=1
+840 FOR ADRESS=0 TO 9 ' S„tt datum och tid
+850   CDATA=ADR%(ADRESS) : GOSUB 5000
+860 NEXT ADRESS
+870 ADRESS=&HA : CDATA=&H20 : GOSUB 5000 ' Tidbas=32.768 kHz
+880 ADRESS=&HB : CDATA=&H2 : GOSUB 5000 ' SET=0
+890 '
+900 GOTO 140 ' Klart
+1000 '
+1010 ' Periodic interrupt
+1020 '
+1021 ADRESS=&HB : GOSUB 5500
+1030 LOCATE 14,1 : PRINT "Periodiskt interrupt"
+1040 INPUT "Ange intervall-val 0-15, 0=inget: ",PERIOD%
+1050 IF PERIOD%<0 OR PERIOD%>15 THEN PRINT CHR$(7) : GOTO 1000
+1060 '
+1070 ADRESS=&HA : CDATA=&H20+PERIOD% : GOSUB 5000 ' S„tt RS0-3 till vald period
+1080 '
+1090 ADRESS=&HB : GOSUB 5500 ' L„s Reg B
+1100 IF PERIOD%=0 THEN CDATA=CDATA AND &HBF : GOTO 1120 ' PIE s„tts till 0
+1110 CDATA=CDATA OR &H40 ' PIE s„tts till 1
+1120 GOSUB 5000
+1130 '
+1140 GOTO 350 ' Menyn
+1500 '
+1510 ' Alarm interrupt
+1520 '
+1521 ADRESS=&HB : GOSUB 5500
+1530 LOCATE 14,1 : PRINT "Alarm interrupt"
+1540 INPUT "Ange timme 0-23 (* ger interrupt varje timma, I ger inget interrupt): ",TIM$
+1545 IF TIM$="I" THEN 1790
+1550 IF TIM$="*" THEN 1590
+1555 TIM1%=ASC(RIGHT$(TIM$,1))-&H30 'low
+1556 TIM2%=ASC(LEFT$(TIM$,1))-&H30 'high
+1570 TIM%=TIM1%+(TIM2%*&H10)
+1580 IF VAL(TIM$)<0 OR VAL(TIM$)>23 THEN PRINT CHR$(7);:GOTO 1500
+1590 '
+1600 LOCATE 16,1 : INPUT "Ange minut 0-59 (* ger interrupt varje minut): ",MIN$
+1610 IF MIN$="*" THEN 1650
+1615 MIN1%=ASC(RIGHT$(MIN$,1))-&H30 'low
+1616 MIN2%=ASC(LEFT$(MIN$,1))-&H30 'high
+1630 MIN%=MIN1%+(MIN2%*&H10)
+1640 IF VAL(MIN$)<0 OR VAL(MIN$)>59 THEN PRINT CHR$(7);:GOTO 1600
+1650 '
+1660 LOCATE 17,1 : INPUT "Ange sekund 0-59 (* ger interrupt varje sekund): ",SEK$
+1670 IF SEK$="*" THEN 1710
+1675 SEK1%=ASC(RIGHT$(SEK$,1))-&H30 'low
+1676 SEK2%=ASC(LEFT$(SEK$,1))-&H30 'high
+1690 SEK%=SEK1%+(SEK2%*&H10)
+1700 IF VAL(SEK$)<0 OR VAL(SEK$)>59 THEN PRINT CHR$(7);:GOTO 1660
+1710 '
+1720 ADRESS=&H5 : IF TIM$="*" THEN CDATA=&HFF ELSE CDATA=TIM%
+1730 GOSUB 5000
+1740 ADRESS=&H3 : IF MIN$="*" THEN CDATA=&HFF ELSE CDATA=MIN%
+1750 GOSUB 5000
+1760 ADRESS=&H1 : IF SEK$="*" THEN CDATA=&HFF ELSE CDATA=SEK%
+1770 GOSUB 5000
+1780 '
+1790 ADRESS=&HB : GOSUB 5500
+1800 IF TIM$="I" THEN CDATA=CDATA AND &HDF : GOTO 1820 ' AIE st„ngs av
+1810 CDATA=CDATA OR &H20 ' AIE s„tts till 1
+1820 GOSUB 5000
+1830 '
+1840 GOTO 350 ' Menyn
+2000 '
+2010 'Update interrupt
+2020 '
+2021 ADRESS=&HB : GOSUB 5500
+2030 LOCATE 14,1 : PRINT "Update interrupt"
+2040 INPUT "Vill du ha update interrupt (en g†ng per sekund) J/N? ",UP$
+2050 IF UP$<>"J" AND UP$<>"j" AND UP$<>"N" AND UP$<>"n" THEN PRINT CHR$(7) : GOTO 2000
+2060 '
+2070 ADRESS=&HB : GOSUB 5500
+2080 IF UP$="J" OR UP$="j" THEN CDATA=CDATA OR &H10 ELSE CDATA =CDATA AND &HEF
+2090 GOSUB 5000 ' S„tt UIE
+2100 '
+2110 GOTO 350 ' Menyn
+5000 '************ Skriv data till klockan ***********************************
+5010 OUT &H30F,&H83
+5020 OUT &H30E,9*16
+5030 OUT &H30E,1*16
+5040 OUT &H30E,3*16
+5050 OUT &H30C,ADRESS
+5060 OUT &H30E,2*16
+5070 OUT &H30E,0*16
+5080 OUT &H30E,8*16
+5090 OUT &H30C,CDATA
+5100 OUT &H30E,1*16
+5110 OUT &H30E,9*16
+5120 OUT &H30F,&H93
+5130 RETURN
+5500 '************ L„s data fr†n klockan *************************************
+5510 OUT &H30F,&H83
+5520 OUT &H30E,&HD*16
+5530 OUT &H30E,5*16
+5540 OUT &H30E,7*16
+5550 OUT &H30C,ADRESS
+5560 OUT &H30E,6*16
+5570 OUT &H30E,4*16
+5580 OUT &H30E,&HC*16
+5590 OUT &H30F,&H93
+5600 CDATA=INP(&H30C)
+5610 OUT &H30E,5*16
+5620 OUT &H30E,&HD*16
+5630 RETURN
+

BIN
PC/PC4680/PC4680/DBTIME.EXE


+ 58 - 0
PC/PC4680/PC4680/DECBIN.BAS

@@ -0,0 +1,58 @@
+80 ' DECBIN.BAS KAP 2 SID 21
+90 ' P-J H”gfeldt  850110
+100 ' OMVANDLING AV DECIMALTAL TILL BINŽRTAL OCH TVŽRTOM
+110 CLS
+120 PRINT "OMVANDLA TAL"
+130 PRINT "1. FR�N DECIMALTAL TILL BINŽRTAL"
+140 PRINT "2. FR�N BINŽRTAL TILL DECIMALTAL"
+150 PRINT "3. AVSLUTA"
+160 PRINT
+170 PRINT "ANGE ALTERNATIV"; : INPUT SVAR
+180 IF SVAR<1 OR SVAR>3 THEN 110
+190 IF SVAR=3 THEN 900
+200 ON SVAR GOSUB 400,600
+210 LOCATE 1,1 : GOTO 120
+400 '
+410 ' DECIMALT TILL BINŽRT
+420 '
+430 LOCATE 10,1 : PRINT SPACE$(80) : LOCATE 10,1
+440 INPUT "SKRIV ETT DECIMALTAL (MAX 65535)";DECIMAL
+450 IF DECIMAL<0 OR DECIMAL>65535! THEN 400
+455 TAL=DECIMAL : GOSUB 800 : DECIMAL%=TAL ' Omvandla till heltal
+460 '
+470 BIN$=""
+480 FOR I=15 TO 0 STEP -1
+485   TAL=2^I : GOSUB 800 : MASK%=TAL ' Omvandla till heltal
+490   BIN$=BIN$+CHR$((DECIMAL% AND MASK%)/MASK%+48)
+500 NEXT I
+510 PRINT "BINŽRA TALET BLEV ";:COLOR 10 :PRINT BIN$ : COLOR 2
+520 RETURN
+600 '
+610 ' BINŽRT TILL DECIMALT
+620 '
+630 LOCATE 15,1 : PRINT SPACE$(80) : LOCATE 15,1
+640 PRINT "SKRIV ETT BINŽRTAL (MAX 16 POSITIONER)";:INPUT BIN$
+650 IF LEN(BIN$)>16 THEN 600
+660 '
+670 I=1 : ANTAL=LEN(BIN$)
+680 DECIMAL=0 : PLATS=1
+690 WHILE I<ANTAL+1
+700   PLATS=INSTR(I,BIN$,"1") : IF PLATS=0 THEN 740
+710   DECIMAL=DECIMAL+2^(ANTAL-PLATS)
+720   I=PLATS+1
+730 WEND
+740 LOCATE 17,1 : PRINT SPACE$(80) : LOCATE 17,1
+750 PRINT "DECIMALA TALET BLEV ";: COLOR 10: PRINT STR$(DECIMAL):COLOR 2
+760 RETURN
+800 '
+810 ' Subrutin som omvandlar flyttal till heltal
+820 '
+830 IF TAL>-32769! AND TAL<32768! THEN 850
+840 TAL=TAL-65536!
+850 RETURN
+900 '
+910 ' AVSLUTA
+920 '
+930 LOCATE 19,1
+940 END
+

+ 19 - 0
PC/PC4680/PC4680/DISPINT.ASM

@@ -0,0 +1,19 @@
+;------------ DISPINT ----------------------------------------
+;
+;  SI=Startadress of string to display
+;  DI=Destinationadress for string
+;  CX=String length
+;
+;-------------------------------------------------------------
+dispint	proc near
+		push es
+		push dx
+		mov dx,disptype
+		mov es,dx
+		cld
+		rep movsb
+		pop dx
+		pop es
+		ret
+dispint	endp
+

+ 14 - 0
PC/PC4680/PC4680/GET.ASM

@@ -0,0 +1,14 @@
+;----------- L„s data fr†n klockan --------------------
+;
+;
+;
+;------------------------------------------------------
+;
+get		proc near
+		mov al,ah
+		out 70h,al
+		in al,71h
+		mov cl,al
+		ret
+get		endp
+

+ 53 - 0
PC/PC4680/PC4680/GET1.ASM

@@ -0,0 +1,53 @@
+;---------- L„s data fr†n klockan i PC4680 ------------------------
+;
+;    DX=basadress f”r kortet
+;    AH=adress i klockan
+;    CL=data fr†n klockan
+;
+;  AX,CX changed
+;
+;------------------------------------------------------------------
+get  		proc near
+		push dx
+     	mov al,83H
+		add dx,0Fh
+		out (DX),AL
+		dec dx
+		mov al,1*10H
+		out (DX),al
+		mov al,13*10H
+		out (DX),al
+		mov al,15*10H
+		out (DX),al
+		mov al,ah
+		dec dx
+		dec dx
+		out (DX),al
+		mov al,14*10H
+		inc dx
+		inc dx
+		out (DX),al
+		mov al,12*10H
+		out (DX),al
+		mov al,4*10H
+		out (DX),al
+		mov al,93H
+		inc dx
+		out (DX),al
+		dec dx
+		dec dx
+		dec dx
+		in al,(DX)
+		mov cl,al
+		mov al,12*10H
+		inc dx
+		inc dx
+		out (DX),al
+		mov al,13*10H
+		out (DX),al
+		mov al,1*10H
+		out (DX),al
+		pop dx
+		ret
+get		endp
+

+ 53 - 0
PC/PC4680/PC4680/GET2.ASM

@@ -0,0 +1,53 @@
+;---------- L„s data fr†n klockan i PC4680 ------------------------
+;
+;    DX=basadress f”r kortet
+;    AH=adress i klockan
+;    CL=data fr†n klockan
+;
+;  AX,CX changed
+;
+;------------------------------------------------------------------
+get  		proc near
+		push dx
+     	mov al,83H
+		add dx,0Fh
+		out (DX),AL
+		dec dx
+		mov al,1*10H
+		out (DX),al
+		dec dx
+		dec dx
+		mov al,ah
+		out (dx),al
+		inc dx
+		inc dx
+		mov al,50h
+		out (dx),al
+		mov al,70h
+		out (dx),al
+		mov al,60h
+		out (dx),al
+		mov al,40h
+		out (dx),al
+		inc dx
+		mov al,93h
+		out (dx),al
+		dec dx
+		mov al,0C0h
+		out (dx),al
+		dec dx
+		dec dx
+		in al,(dx)
+		mov cl,al
+		inc dx
+		inc dx
+		mov al,0C0h
+		out (dx),al
+		mov al,0D0h
+		out (dx),al
+		mov al,10h
+		out (dx),al
+		pop dx
+		ret
+get		endp
+

+ 8 - 0
PC/PC4680/PC4680/INITINT.ASM

@@ -0,0 +1,8 @@
+initint	proc near
+		mov dx,intstart
+		mov al,0Ah
+		mov ah,25h
+		int 21h
+		ret
+initint	endp
+

+ 36 - 0
PC/PC4680/PC4680/INT4085.BAS

@@ -0,0 +1,36 @@
+10 ' Int4085.bas  P-J H”gfeldt  850212
+20 ' Kap 3.3, Sid 52, Ex 3
+30 ' AVLŽSNING AV DE FYRA INTERRUPT-ING�NGARNA MED KORT 4085
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,8 ' Kortval
+70 '
+80 CLS : PRINT "Programmet visar interrupt-ing†ngarna bin„rt och decimalt."
+90 '
+100 WHILE I$<>"S"
+110   '
+120   IN%=INP(&H301)-&HF0 ' L„s interrupt-ing., dra bort de h”gsta fyra bitarna.
+130   PRINT : PRINT  "Bin„rt=" TAB(20);
+140   FOR L%=3 TO 0 STEP -1
+150     PRINT (IN% AND 2^L%)/2^L%;
+160   NEXT L%
+170   '
+180   PRINT
+190   PRINT "Decimalt=" TAB(20) IN%
+200   '
+210   PRINT
+220   INPUT "Return=mer, S=Slut? ",I$
+230   '
+240 WEND
+250 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL PROGRAMMET
+1020 '
+1030 ' 50  Nollst„ll korten.
+1040 ' 60  V„lj kort 4085 som h„r har adress 8.
+1050 ' 100 H†ll p† tills ett S „r inmatat.
+1080 ' 120 L„s de 8 ing†ngarna till In%, endast de 4 f”rsta „r intressanta.
+1090 ' 130-160 Presentera bin„rt.
+1120 ' 190 Presentera decimalt.
+1130 ' 220 Fr†ga om vi skall forts„tta.
+

+ 29 - 0
PC/PC4680/PC4680/INTTABLE.ASM

@@ -0,0 +1,29 @@
+;---------- INTTABLE --------------------------------------
+;
+;  Interrupt routin call table for 'intvekt'
+;
+;  No registers changed
+;
+;----------------------------------------------------------
+;
+inttable	proc near
+;
+bit_7:	call resin
+		jmp nextint
+bit_6:	call dbint
+		jmp nextint
+bit_5:	call nolegint
+		jmp nextint
+bit_4:	call nolegint
+		jmp nextint
+bit_3:	call nolegint
+		jmp nextint
+bit_2:	call nolegint
+		jmp nextint
+bit_1:	call nolegint
+		jmp nextint
+bit_0:	call clivekt
+		jmp nextint
+;
+inttable	endp
+

+ 37 - 0
PC/PC4680/PC4680/INTVEKT.ASM

@@ -0,0 +1,37 @@
+;---------- INTVEKT --------------------------------------------
+;
+;  DX=PC4680 base adress
+;
+;  AX,BX,CX changed
+;
+;---------------------------------------------------------------
+;
+intvekt	proc near
+		push dx
+		add dx,05h
+		in al,(dx)
+		pop dx
+		mov cl,al
+		mov ch,05h
+		mov ax,0008h
+		lea bx,inttable
+test_bit:	push ax
+		push bx
+		push cx
+		push dx
+		test cl,01h
+		jnz nextint
+		imul ch
+		sub al,05h
+		add bx,ax
+		jmp bx
+nextint:	pop dx
+		pop cx
+		pop bx
+		pop ax
+		shr cl,1
+		dec al
+		jnz test_bit
+		ret
+intvekt	endp
+

+ 109 - 0
PC/PC4680/PC4680/INT_ATCO.ASM

@@ -0,0 +1,109 @@
+;
+;------------ STACK --------------------------------
+;
+stack	segment para stack 'stack'
+		db 256 dup ('stack   ')
+stack	ends
+;
+;-----------------------------------------------------
+;
+;
+;------------ CODE ----------------------------------
+;
+cseg		segment para public 'code'
+		assume cs:cseg,ds:cseg,es:cseg,ss:stack
+;
+;---------- INITINT --------------------------------
+;
+intatco	proc far
+        	cli
+		push ds
+		push es
+		mov dx,cs
+		mov es,dx
+		mov ds,dx
+		lea dx,int
+		mov ax,2571h
+		int 21h
+		in al,0A1h
+		and al,0FDh
+		out 0A1h,al
+		mov dx,0300h
+		mov ah,0Ch
+		call get
+		mov disptype,0B800h
+     	lea ax,last_adr
+		and ax,0FFF0h
+		add ax,0010h
+		mov dx,ax
+		mov ax,3100h
+		pop es
+		pop ds
+		sti
+		int 21h
+intatco	endp
+;
+;---------- INT ----------------------------------------
+;
+int		proc far
+         	cli
+		push ax
+		push dx
+more:	push cx
+		push bx
+		push di
+		push si
+		push bp
+		push ds
+		push es
+		mov ax,cs
+		mov ds,ax
+		mov es,ax
+		mov bp,0
+		mov dx,0300h
+		call intvekt
+		mov al,62h
+		out 20h,al
+		mov al,61h
+		out 0A0h,al
+		pop es
+		pop ds
+		pop bp
+		pop si
+		pop di
+		pop bx
+		pop cx
+		mov dx,0305h
+		in al,(dx)
+		xor al,0FFh
+		jnz more
+		pop dx
+		pop ax
+		sti
+		iret
+int		endp
+;
+		include intvekt.asm
+		include inttable.asm
+		include clivekt.asm
+		include alarm.asm
+		include period.asm
+		include clockint.asm
+		include resin.asm
+		include dbint.asm
+		include nolegint.asm
+		include dispint.asm
+		include get.asm
+		include set.asm
+;
+im_master	dw 1 dup (?)
+;
+im_slave	dw 1 dup (?)
+;
+disptype	dw 1 dup (?)
+;
+last_adr 	dw 1 dup (?)
+;
+cseg		ends
+		end
+

BIN
PC/PC4680/PC4680/INT_ATCO.EXE


+ 678 - 0
PC/PC4680/PC4680/INT_ATCO.LST

@@ -0,0 +1,678 @@
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-1
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 	 	 	 	;
+ 	 	 	 	;------------ STACK ---------------------------
+	 	 	 	-----
+ 	 	 	 	;
+ 0000	 	 	 	stack	segment para stack 'stack'
+ 0000  0100 [	 	 	 	 	db 256 dup ('stack   ')
+               73 74 61 63	
+               6B 20 20 20	
+                            ]	
+ 	 	 	 	
+ 0800	 	 	 	stack	ends
+ 	 	 	 	;
+ 	 	 	 	;----------------------------------------------
+	 	 	 	-------
+ 	 	 	 	;
+ 	 	 	 	;
+ 	 	 	 	;------------ CODE ----------------------------
+	 	 	 	------
+ 	 	 	 	;
+ 0000	 	 	 	cseg	 	segment para public 'code'
+ 	 	 	 	 	 	assume cs:cseg,ds:cseg,es:cseg,
+	 	 	 	ss:stack
+ 	 	 	 	;
+ 	 	 	 	;---------- INITINT ---------------------------
+	 	 	 	-----
+ 	 	 	 	;
+ 0000	 	 	 	intatco	proc far
+ 0000  FA	 	 	        	cli
+ 0001  1E	 	 	 	 	push ds
+ 0002  06	 	 	 	 	push es
+ 0003  8C CA	 	 	 	 	mov dx,cs
+ 0005  8E C2	 	 	 	 	mov es,dx
+ 0007  8E DA	 	 	 	 	mov ds,dx
+ 0009  8D 16 003A R	 	 	 	lea dx,int
+ 000D  B8 2571	 	 	 	 	mov ax,2571h
+ 0010  CD 21	 	 	 	 	int 21h
+ 0012  E4 A1	 	 	 	 	in al,0A1h
+ 0014  24 FD	 	 	 	 	and al,0FDh
+ 0016  E6 A1	 	 	 	 	out 0A1h,al
+ 0018  BA 0300	 	 	 	 	mov dx,0300h
+ 001B  B4 0C	 	 	 	 	mov ah,0Ch
+ 001D  E8 0266 R	 	 	 	call get
+ 0020  C7 06 02D3 R B800	 	 	mov disptype,0B800h
+ 0026  8D 06 02D5 R	 	     	lea ax,last_adr
+ 002A  25 FFF0	 	 	 	 	and ax,0FFF0h
+ 002D  05 0010	 	 	 	 	add ax,0010h
+ 0030  8B D0	 	 	 	 	mov dx,ax
+ 0032  B8 3100	 	 	 	 	mov ax,3100h
+ 0035  07	 	 	 	 	pop es
+ 0036  1F	 	 	 	 	pop ds
+ 0037  FB	 	 	 	 	sti
+ 0038  CD 21	 	 	 	 	int 21h
+ 003A	 	 	 	intatco	endp
+ 	 	 	 	;
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-2
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 	 	 	 	;---------- INT -------------------------------
+	 	 	 	---------
+ 	 	 	 	;
+ 003A	 	 	 	int	 	proc far
+ 003A  FA	 	 	         	cli
+ 003B  50	 	 	 	 	push ax
+ 003C  52	 	 	 	 	push dx
+ 003D  51	 	 	more:	push cx
+ 003E  53	 	 	 	 	push bx
+ 003F  57	 	 	 	 	push di
+ 0040  56	 	 	 	 	push si
+ 0041  55	 	 	 	 	push bp
+ 0042  1E	 	 	 	 	push ds
+ 0043  06	 	 	 	 	push es
+ 0044  8C C8	 	 	 	 	mov ax,cs
+ 0046  8E D8	 	 	 	 	mov ds,ax
+ 0048  8E C0	 	 	 	 	mov es,ax
+ 004A  BD 0000	 	 	 	 	mov bp,0
+ 004D  BA 0300	 	 	 	 	mov dx,0300h
+ 0050  E8 006E R	 	 	 	call intvekt
+ 0053  B0 62	 	 	 	 	mov al,62h
+ 0055  E6 20	 	 	 	 	out 20h,al
+ 0057  B0 61	 	 	 	 	mov al,61h
+ 0059  E6 A0	 	 	 	 	out 0A0h,al
+ 005B  07	 	 	 	 	pop es
+ 005C  1F	 	 	 	 	pop ds
+ 005D  5D	 	 	 	 	pop bp
+ 005E  5E	 	 	 	 	pop si
+ 005F  5F	 	 	 	 	pop di
+ 0060  5B	 	 	 	 	pop bx
+ 0061  59	 	 	 	 	pop cx
+ 0062  BA 0305	 	 	 	 	mov dx,0305h
+ 0065  EC	 	 	 	 	in al,(dx)
+ 0066  34 FF	 	 	 	 	xor al,0FFh
+ 0068  75 D3	 	 	 	 	jnz more
+ 006A  5A	 	 	 	 	pop dx
+ 006B  58	 	 	 	 	pop ax
+ 006C  FB	 	 	 	 	sti
+ 006D  CF	 	 	 	 	iret
+ 006E	 	 	 	int	 	endp
+ 	 	 	 	;
+                             C	 	 	include intvekt.asm
+                             C	;---------- INTVEKT ---------------------------
+	 	 	 	-----------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  AX,BX,CX changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	-----------------
+                             C	;
+ 006E                        C	intvekt	proc near
+ 006E  52                    C	 	 	push dx
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-3
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 006F  83 C2 05              C	 	 	add dx,05h
+ 0072  EC                    C	 	 	in al,(dx)
+ 0073  5A                    C	 	 	pop dx
+ 0074  8A C8                 C	 	 	mov cl,al
+ 0076  B5 05                 C	 	 	mov ch,05h
+ 0078  B8 0008               C	 	 	mov ax,0008h
+ 007B  8D 1E 009B R          C	 	 	lea bx,inttable
+ 007F  50                    C	test_bit:	push ax
+ 0080  53                    C	 	 	push bx
+ 0081  51                    C	 	 	push cx
+ 0082  52                    C	 	 	push dx
+ 0083  F6 C1 01              C	 	 	test cl,01h
+ 0086  75 08                 C	 	 	jnz nextint
+ 0088  F6 ED                 C	 	 	imul ch
+ 008A  2C 05                 C	 	 	sub al,05h
+ 008C  03 D8                 C	 	 	add bx,ax
+ 008E  FF E3                 C	 	 	jmp bx
+ 0090  5A                    C	nextint:	pop dx
+ 0091  59                    C	 	 	pop cx
+ 0092  5B                    C	 	 	pop bx
+ 0093  58                    C	 	 	pop ax
+ 0094  D0 E9                 C	 	 	shr cl,1
+ 0096  FE C8                 C	 	 	dec al
+ 0098  75 E5                 C	 	 	jnz test_bit
+ 009A  C3                    C	 	 	ret
+ 009B                        C	intvekt	endp
+                             C	 	 	include inttable.asm
+                             C	;---------- INTTABLE --------------------------
+	 	 	 	------------
+                             C	;
+                             C	;  Interrupt routin call table for 'intvekt'
+                             C	;
+                             C	;  No registers changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	------------
+                             C	;
+ 009B                        C	inttable	proc near
+                             C	;
+ 009B  E8 019C R             C	bit_7:	call resin
+ 009E  EB F0                 C	 	 	jmp nextint
+ 00A0  E8 01CE R             C	bit_6:	call dbint
+ 00A3  EB EB                 C	 	 	jmp nextint
+ 00A5  E8 0210 R             C	bit_5:	call nolegint
+ 00A8  EB E6                 C	 	 	jmp nextint
+ 00AA  E8 0210 R             C	bit_4:	call nolegint
+ 00AD  EB E1                 C	 	 	jmp nextint
+ 00AF  E8 0210 R             C	bit_3:	call nolegint
+ 00B2  EB DC                 C	 	 	jmp nextint
+ 00B4  E8 0210 R             C	bit_2:	call nolegint
+ 00B7  EB D7                 C	 	 	jmp nextint
+ 00B9  E8 0210 R             C	bit_1:	call nolegint
+ 00BC  EB D2                 C	 	 	jmp nextint
+ 00BE  E8 00C3 R             C	bit_0:	call clivekt
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-4
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 00C1  EB CD                 C	 	 	jmp nextint
+                             C	;
+ 00C3                        C	inttable	endp
+                             C	 	 	include clivekt.asm
+                             C	;--------- CLIVEKT ----------------------------
+	 	 	 	---------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  Interrupt routine call select for clock inte
+	 	 	 	rrupts
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------
+                             C	;
+ 00C3                        C	clivekt	proc near
+ 00C3  B4 0B                 C	 	 	mov ah,0Bh
+ 00C5  E8 0266 R             C	 	 	call get
+ 00C8  8A C1                 C	 	 	mov al,cl
+ 00CA  0C 8F                 C	 	 	or al,8Fh
+ 00CC  50                    C	 	 	push ax
+ 00CD  B4 0C                 C	 	 	mov ah,0Ch
+ 00CF  E8 0266 R             C	 	 	call get
+ 00D2  58                    C	 	 	pop ax
+ 00D3  22 C8                 C	 	 	and cl,al
+ 00D5  8B D9                 C	 	 	mov bx,cx
+ 00D7  F6 C1 80              C	IRQF:	test cl,80h
+ 00DA  74 1C                 C	 	 	jz exit
+ 00DC  F6 C1 40              C	PF:	 	test cl,40h
+ 00DF  74 05                 C	 	 	jz AF
+ 00E1  E8 012B R             C	 	 	call period
+ 00E4  8B CB                 C	 	 	mov cx,bx
+ 00E6  F6 C1 20              C	AF:   	test cl,20h
+ 00E9  74 05                 C	 	 	jz UF
+ 00EB  E8 00FB R             C	 	 	call alarm
+ 00EE  8B CB                 C	 	 	mov cx,bx
+ 00F0  F6 C1 10              C	UF: 	 	test cl,10h
+ 00F3  74 03                 C	 	 	jz exit
+ 00F5  E8 0144 R             C	 	 	call clockint
+ 00F8  8B CB                 C	exit:	mov cx,bx
+ 00FA  C3                    C	     	ret
+ 00FB                        C	clivekt	endp
+                             C	 	 	include alarm.asm
+                             C	;---------- ALARM -----------------------------
+	 	 	 	----------------
+                             C	;
+                             C	;  Routine for alarminterrupt from clock
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+                             C	;
+ 00FB                        C	alarm	proc near
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-5
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 00FB  8D 36 0121 R          C	 	 	lea si,ala_str
+ 00FF  BF 0136               C	 	 	mov di,310
+ 0102  B9 000A               C	 	 	mov cx,10
+ 0105  E8 0258 R             C	 	 	call dispint
+ 0108  50                    C	 	 	push ax
+ 0109  E4 61                 C	 	 	in al,61h
+ 010B  0C 03                 C	 	 	or al,03h
+ 010D  E6 61                 C	 	 	out 61h,al
+ 010F  50                    C	 	 	push ax
+ 0110  B8 2000               C	 	 	mov ax,2000h
+ 0113  50                    C	loopa:	push ax
+ 0114  58                    C	 	 	pop ax
+ 0115  50                    C	 	 	push ax
+ 0116  58                    C	 	 	pop ax
+ 0117  48                    C	 	 	dec ax
+ 0118  75 F9                 C	 	 	jnz loopa
+ 011A  58                    C	 	 	pop ax
+ 011B  24 FC                 C	 	 	and al,0FCh
+ 011D  E6 61                 C	 	 	out 61h,al
+ 011F  58                    C	 	 	pop ax
+ 0120  C3                    C	 	 	ret
+                             C	;
+ 0121  41 0F 4C 0F 41 0F     C	ala_str:	db 'ALARM'
+       52 0F 4D 0F           C	
+                             C	;
+ 012B                        C	alarm	endp
+                             C	 	 	include period.asm
+                             C	;---------- PERIOD ----------------------------
+	 	 	 	----------
+                             C	;
+                             C	;  Interrupt routine for periodic interrupt fro
+	 	 	 	m clock
+                             C	;
+                             C	;  No registers changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------
+                             C	;
+ 012B                        C	period	proc near
+ 012B  50                    C	 	 	push ax
+ 012C  E4 61                 C	 	 	in al,61h
+ 012E  0C 03                 C	 	 	or al,03h
+ 0130  E6 61                 C	 	 	out 61h,al
+ 0132  50                    C	 	 	push ax
+ 0133  B8 0010               C	 	 	mov ax,0010h
+ 0136  50                    C	loop:	push ax
+ 0137  58                    C	 	 	pop ax
+ 0138  50                    C	 	 	push ax
+ 0139  58                    C	 	 	pop ax
+ 013A  48                    C	 	 	dec ax
+ 013B  75 F9                 C	 	 	jnz loop
+ 013D  58                    C	 	 	pop ax
+ 013E  24 FC                 C	 	 	and al,0FCh
+ 0140  E6 61                 C	 	 	out 61h,al
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-6
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 0142  58                    C	 	 	pop ax
+ 0143  C3                    C	 	 	ret
+ 0144                        C	period	endp
+                             C	 	 	include clockint.asm
+                             C	;------------ CLOCKINT ------------------------
+	 	 	 	----------------
+                             C	;
+                             C	; DX=PC4680 base adress
+                             C	;
+                             C	;  AX,CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+ 0144                        C	clockint	proc near
+ 0144  8D 36 018C R          C	 	 	lea si,cli_str
+ 0148  BF 0090               C	 	 	mov di,90h
+ 014B  B9 0010               C	 	 	mov cx,10h
+ 014E  56                    C	 	 	push si
+ 014F  51                    C	 	 	push cx
+ 0150  83 C6 0E              C	 	 	add si,0Eh
+ 0153  B4 00                 C	 	 	mov ah,00h
+ 0155  E8 0266 R             C	next:	call get
+ 0158  8A E9                 C	 	 	mov ch,cl
+ 015A  81 E1 F00F            C	 	 	and cx,0F00Fh
+ 015E  D0 CD                 C	 	 	ror ch,1
+ 0160  D0 CD                 C	 	 	ror ch,1
+ 0162  D0 CD                 C	 	 	ror ch,1
+ 0164  D0 CD                 C	 	 	ror ch,1
+ 0166  81 C1 3030            C	 	 	add cx,3030h
+ 016A  2E: 88 0C             C	 	 	mov cs:[si],cl
+ 016D  4E                    C	 	 	dec si
+ 016E  4E                    C	 	 	dec si
+ 016F  2E: 88 2C             C	 	 	mov cs:[si],ch
+ 0172  4E                    C	 	 	dec si
+ 0173  4E                    C	 	 	dec si
+ 0174  F6 C4 04              C	 	 	test ah,4
+ 0177  75 0D                 C	 	 	jnz display
+ 0179  FE C4                 C	 	 	inc ah
+ 017B  FE C4                 C	 	 	inc ah
+ 017D  B0 3A                 C	 	 	mov al,3Ah
+ 017F  2E: 88 04             C	 	 	mov cs:[si],al
+ 0182  4E                    C	 	 	dec si
+ 0183  4E                    C	 	 	dec si
+ 0184  EB CF                 C	 	 	jmp next
+ 0186  59                    C	display:	pop cx
+ 0187  5E                    C	 	 	pop si
+ 0188  E8 0258 R             C	 	 	call dispint
+ 018B  C3                    C	 	 	ret
+                             C	;
+ 018C     08 [               C	cli_str: 	dw 8 dup (' ')
+                0F20         C	
+                      ]      C	
+                             C	
+                             C	;
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-7
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 019C                        C	clockint	endp
+                             C	 	 	include resin.asm
+                             C	;------------ RESIN ---------------------------
+	 	 	 	----------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+ 019C                        C	resin	proc near
+ 019C  8D 36 01AA R          C	 	 	lea si,res_str
+ 01A0  BF 0000               C	 	 	mov di,0000
+ 01A3  B9 0024               C	 	 	mov cx,36
+ 01A6  E8 0258 R             C	 	 	call dispint
+ 01A9  C3                    C	 	 	ret
+                             C	;
+ 01AA  52 0F 65 0F 73 0F     C	res_str:	db 'Reset on DataB
+	 	 	 	oard'
+       65 0F 74 0F 20 0F     C	
+       6F 0F 6E 0F 20 0F     C	
+       44 0F 61 0F 74 0F     C	
+       61 0F 42 0F 6F 0F     C	
+       61 0F 72 0F 64 0F     C	
+                             C	;
+ 01CE                        C	resin	endp
+                             C	 	 	include dbint.asm
+                             C	;------------ DBINT ---------------------------
+	 	 	 	---------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------------
+ 01CE                        C	dbint	proc near
+ 01CE  8D 36 01E4 R          C	 	 	lea si,dbi_str
+ 01D2  BF 0026               C	 	 	mov di,0038
+ 01D5  B9 002C               C	 	 	mov cx,44
+ 01D8  E8 0258 R             C	 	 	call dispint
+ 01DB  50                    C	 	 	push ax
+ 01DC  52                    C	 	 	push dx
+ 01DD  BA 0307               C	 	 	mov dx,0307h
+ 01E0  EC                    C	 	 	in al,(dx)
+ 01E1  5A                    C	 	 	pop dx
+ 01E2  58                    C	 	 	pop ax
+ 01E3  C3                    C	 	 	ret
+                             C	;
+ 01E4  49 0F 6E 0F 74 0F     C	dbi_str:	db 'Interrupt on D
+	 	 	 	ataBoard'
+       65 0F 72 0F 72 0F     C	
+       75 0F 70 0F 74 0F     C	
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-8
+	 	 	 	 	 	 	 	06-05-86    
+
+
+       20 0F 6F 0F 6E 0F     C	
+       20 0F 44 0F 61 0F     C	
+       74 0F 61 0F 42 0F     C	
+       6F 0F 61 0F 72 0F     C	
+       64 0F                 C	
+                             C	;
+ 0210                        C	dbint	endp
+                             C	 	 	include nolegint.asm
+                             C	;------------ NOLEGINT ------------------------
+	 	 	 	------------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	------------------
+ 0210                        C	nolegint	proc near
+ 0210  8D 36 021E R          C	 	 	lea si,nli_str
+ 0214  BF 0054               C	 	 	mov di,0084
+ 0217  B9 003A               C	 	 	mov cx,58
+ 021A  E8 0258 R             C	 	 	call dispint
+ 021D  C3                    C	 	 	ret
+                             C	;
+ 021E  49 0F 6C 0F 6C 0F     C	nli_str:	db 'Illegal interr
+	 	 	 	upt has occured'
+       65 0F 67 0F 61 0F     C	
+       6C 0F 20 0F 69 0F     C	
+       6E 0F 74 0F 65 0F     C	
+       72 0F 72 0F 75 0F     C	
+       70 0F 74 0F 20 0F     C	
+       68 0F 61 0F 73 0F     C	
+       20 0F 6F 0F 63 0F     C	
+       63 0F 75 0F 72 0F     C	
+       65 0F 64 0F           C	
+                             C	;
+ 0258                        C	nolegint	endp
+                             C	 	 	include dispint.asm
+                             C	;------------ DISPINT -------------------------
+	 	 	 	---------------
+                             C	;
+                             C	;  SI=Startadress of string to display
+                             C	;  DI=Destinationadress for string
+                             C	;  CX=String length
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------------
+ 0258                        C	dispint	proc near
+ 0258  06                    C	 	 	push es
+ 0259  52                    C	 	 	push dx
+ 025A  8B 16 02D3 R          C	 	 	mov dx,disptype
+ 025E  8E C2                 C	 	 	mov es,dx
+ 0260  FC                    C	 	 	cld
+ 0261  F3/ A4                C	 	 	rep movsb
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-9
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 0263  5A                    C	 	 	pop dx
+ 0264  07                    C	 	 	pop es
+ 0265  C3                    C	 	 	ret
+ 0266                        C	dispint	endp
+                             C	 	 	include get.asm
+                             C	;---------- L„s data fr†n klockan i PC4680 ----
+	 	 	 	--------------------
+                             C	;
+                             C	;    DX=basadress f”r kortet
+                             C	;    AH=adress i klockan
+                             C	;    CL=data fr†n klockan
+                             C	;
+                             C	;  AX,CX changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	--------------------
+ 0266                        C	get  	 	proc near
+ 0266  52                    C	 	 	push dx
+ 0267  B0 83                 C	     	mov al,83H
+ 0269  83 C2 0F              C	 	 	add dx,0Fh
+ 026C  EE                    C	 	 	out (DX),AL
+ 026D  4A                    C	 	 	dec dx
+ 026E  B0 D0                 C	 	 	mov al,0DH*10H
+ 0270  EE                    C	 	 	out (DX),al
+ 0271  B0 50                 C	 	 	mov al,5*10H
+ 0273  EE                    C	 	 	out (DX),al
+ 0274  B0 70                 C	 	 	mov al,7*10H
+ 0276  EE                    C	 	 	out (DX),al
+ 0277  8A C4                 C	 	 	mov al,ah
+ 0279  4A                    C	 	 	dec dx
+ 027A  4A                    C	 	 	dec dx
+ 027B  EE                    C	 	 	out (DX),al
+ 027C  B0 60                 C	 	 	mov al,6*10H
+ 027E  42                    C	 	 	inc dx
+ 027F  42                    C	 	 	inc dx
+ 0280  EE                    C	 	 	out (DX),al
+ 0281  B0 40                 C	 	 	mov al,4*10H
+ 0283  EE                    C	 	 	out (DX),al
+ 0284  B0 C0                 C	 	 	mov al,0CH*10H
+ 0286  EE                    C	 	 	out (DX),al
+ 0287  B0 93                 C	 	 	mov al,93H
+ 0289  42                    C	 	 	inc dx
+ 028A  EE                    C	 	 	out (DX),al
+ 028B  4A                    C	 	 	dec dx
+ 028C  4A                    C	 	 	dec dx
+ 028D  4A                    C	 	 	dec dx
+ 028E  EC                    C	 	 	in al,(DX)
+ 028F  8A C8                 C	 	 	mov cl,al
+ 0291  B0 50                 C	 	 	mov al,5*10H
+ 0293  42                    C	 	 	inc dx
+ 0294  42                    C	 	 	inc dx
+ 0295  EE                    C	 	 	out (DX),al
+ 0296  B0 D0                 C	 	 	mov al,0DH*10H
+ 0298  EE                    C	 	 	out (DX),al
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-10
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 0299  5A                    C	 	 	pop dx
+ 029A  C3                    C	 	 	ret
+ 029B                        C	get	 	endp
+                             C	 	 	include set.asm
+                             C	;---------- Skriv data till klockan i PC4680 --
+	 	 	 	--------------------
+                             C	;
+                             C	;    DX=basadress f”r kortet
+                             C	;    AH=adress i klockan
+                             C	;    CL=data till klockan
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	--------------------
+                             C	;
+ 029B                        C	set	 	proc near
+ 029B  52                    C	 	 	push dx
+ 029C  B0 83                 C	      	mov AL,83H
+ 029E  83 C2 0F              C	 	 	add dx,0Fh
+ 02A1  EE                    C	 	 	out (DX),AL
+ 02A2  4A                    C	 	 	dec dx
+ 02A3  B0 90                 C	 	 	mov AL,9*10H
+ 02A5  EE                    C	 	 	out (DX),AL
+ 02A6  B0 10                 C	 	 	mov AL,1*10H
+ 02A8  EE                    C	 	 	out (DX),AL
+ 02A9  B0 30                 C	 	 	mov AL,3*10H
+ 02AB  EE                    C	 	 	out (DX),AL
+ 02AC  8A C4                 C	 	 	mov AL,AH
+ 02AE  4A                    C	 	 	dec dx
+ 02AF  4A                    C	 	 	dec dx
+ 02B0  EE                    C	 	 	out (DX),AL
+ 02B1  B0 20                 C	 	 	mov AL,2*10H
+ 02B3  42                    C	 	 	inc dx
+ 02B4  42                    C	 	 	inc dx
+ 02B5  EE                    C	 	 	out (DX),AL
+ 02B6  B0 00                 C	 	 	mov AL,0*10H
+ 02B8  EE                    C	 	 	out (DX),AL
+ 02B9  B0 80                 C	 	 	mov AL,8*10H
+ 02BB  EE                    C	 	 	out (DX),AL
+ 02BC  8A C1                 C	 	 	mov AL,CL
+ 02BE  4A                    C	 	 	dec dx
+ 02BF  4A                    C	 	 	dec dx
+ 02C0  EE                    C	 	 	out (DX),AL
+ 02C1  B0 10                 C	 	 	mov AL,1*10H
+ 02C3  42                    C	 	 	inc dx
+ 02C4  42                    C	 	 	inc dx
+ 02C5  EE                    C	 	 	out (DX),AL
+ 02C6  B0 90                 C	 	 	mov AL,9*10H
+ 02C8  EE                    C	 	 	out (DX),AL
+ 02C9  B0 93                 C	 	 	mov AL,93H
+ 02CB  42                    C	 	 	inc dx
+ 02CC  EE                    C	 	 	out (DX),AL
+ 02CD  5A                    C	 	 	pop dx
+ 02CE  C3                    C	 	 	ret
+ 02CF                        C	set	 	endp
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-11
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 	 	 	 	;
+ 02CF     01 [	 	 	im_master	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02D1     01 [	 	 	im_slave	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02D3     01 [	 	 	disptype	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02D5     01 [	 	 	last_adr 	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02D7	 	 	 	cseg	 	ends
+ 	 	 	 	 	 	end
+
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	Symbols
+	 	 	 	-1
+	 	 	 	 	 	 	 	06-05-86    
+
+
+Segments and Groups:
+
+	 	N a m e	 	 	Size	Align	Combine	Class
+
+CSEG . . . . . . . . . . . . . .	02D7	PARA  	PUBLIC	'CODE'
+STACK. . . . . . . . . . . . . .	0800	PARA  	STACK 	'STACK'
+
+Symbols:            
+
+	 	N a m e	 	 	Type	Value	Attr         
+
+AF . . . . . . . . . . . . . . .	L NEAR 	00E6	CSEG
+ALARM. . . . . . . . . . . . . .	N PROC	00FB	CSEG	Length =0030
+ALA_STR. . . . . . . . . . . . .	L NEAR 	0121	CSEG
+BIT_0. . . . . . . . . . . . . .	L NEAR 	00BE	CSEG
+BIT_1. . . . . . . . . . . . . .	L NEAR 	00B9	CSEG
+BIT_2. . . . . . . . . . . . . .	L NEAR 	00B4	CSEG
+BIT_3. . . . . . . . . . . . . .	L NEAR 	00AF	CSEG
+BIT_4. . . . . . . . . . . . . .	L NEAR 	00AA	CSEG
+BIT_5. . . . . . . . . . . . . .	L NEAR 	00A5	CSEG
+BIT_6. . . . . . . . . . . . . .	L NEAR 	00A0	CSEG
+BIT_7. . . . . . . . . . . . . .	L NEAR 	009B	CSEG
+CLIVEKT. . . . . . . . . . . . .	N PROC	00C3	CSEG	Length =0038
+CLI_STR. . . . . . . . . . . . .	L NEAR 	018C	CSEG
+CLOCKINT . . . . . . . . . . . .	N PROC	0144	CSEG	Length =0058
+DBINT. . . . . . . . . . . . . .	N PROC	01CE	CSEG	Length =0042
+DBI_STR. . . . . . . . . . . . .	L NEAR 	01E4	CSEG
+DISPINT. . . . . . . . . . . . .	N PROC	0258	CSEG	Length =000E
+DISPLAY. . . . . . . . . . . . .	L NEAR 	0186	CSEG
+DISPTYPE . . . . . . . . . . . .	L WORD 	02D3	CSEG
+EXIT . . . . . . . . . . . . . .	L NEAR 	00F8	CSEG
+GET. . . . . . . . . . . . . . .	N PROC	0266	CSEG	Length =0035
+IM_MASTER. . . . . . . . . . . .	L WORD 	02CF	CSEG
+IM_SLAVE . . . . . . . . . . . .	L WORD 	02D1	CSEG
+INT. . . . . . . . . . . . . . .	F PROC	003A	CSEG	Length =0034
+INTATCO. . . . . . . . . . . . .	F PROC	0000	CSEG	Length =003A
+INTTABLE . . . . . . . . . . . .	N PROC	009B	CSEG	Length =0028
+INTVEKT. . . . . . . . . . . . .	N PROC	006E	CSEG	Length =002D
+IRQF . . . . . . . . . . . . . .	L NEAR 	00D7	CSEG
+LAST_ADR . . . . . . . . . . . .	L WORD 	02D5	CSEG
+LOOP . . . . . . . . . . . . . .	L NEAR 	0136	CSEG
+LOOPA. . . . . . . . . . . . . .	L NEAR 	0113	CSEG
+MORE . . . . . . . . . . . . . .	L NEAR 	003D	CSEG
+NEXT . . . . . . . . . . . . . .	L NEAR 	0155	CSEG
+NEXTINT. . . . . . . . . . . . .	L NEAR 	0090	CSEG
+NLI_STR. . . . . . . . . . . . .	L NEAR 	021E	CSEG
+NOLEGINT . . . . . . . . . . . .	N PROC	0210	CSEG	Length =0048
+PERIOD . . . . . . . . . . . . .	N PROC	012B	CSEG	Length =0019
+PF . . . . . . . . . . . . . . .	L NEAR 	00DC	CSEG
+RESIN. . . . . . . . . . . . . .	N PROC	019C	CSEG	Length =0032
+RES_STR. . . . . . . . . . . . .	L NEAR 	01AA	CSEG
+SET. . . . . . . . . . . . . . .	N PROC	029B	CSEG	Length =0034
+TEST_BIT . . . . . . . . . . . .	L NEAR 	007F	CSEG
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	Symbols
+	 	 	 	-2
+	 	 	 	 	 	 	 	06-05-86    
+
+
+UF . . . . . . . . . . . . . . .	L NEAR 	00F0	CSEG
+
+48642 Bytes free   
+
+Warning Severe
+Errors	Errors 
+0	0

+ 108 - 0
PC/PC4680/PC4680/INT_ATMO.ASM

@@ -0,0 +1,108 @@
+;
+;------------ STACK --------------------------------
+;
+stack	segment para stack 'stack'
+		db 256 dup ('stack   ')
+stack	ends
+;
+;-----------------------------------------------------
+;
+;
+;------------ CODE ----------------------------------
+;
+cseg		segment para public 'code'
+		assume cs:cseg,ds:cseg,es:cseg,ss:stack
+;
+;---------- INITINT --------------------------------
+;
+intatmo	proc far
+        	cli
+		push ds
+		push es
+		mov dx,cs
+		mov es,dx
+		mov ds,dx
+		lea dx,int
+		mov ax,2571h
+		int 21h
+		in al,0A1h
+		and al,0FDh
+		out 0A1h,al
+		mov dx,0300h
+		mov ah,0Ch
+		call get
+         	mov disptype,0B000h
+     	lea ax,last_adr
+		and ax,0FFF0h
+		add ax,0010h
+		mov dx,ax
+		mov ax,3100h
+		pop es
+		pop ds
+		sti
+		int 21h
+intatmo	endp
+;
+;---------- INT ----------------------------------------
+;
+int		proc far
+         	cli
+		push ax
+		push dx
+more:	push cx
+		push bx
+		push di
+		push si
+		push bp
+		push ds
+		push es
+		mov ax,cs
+		mov ds,ax
+		mov es,ax
+		mov bp,0
+		mov dx,0300h
+		call intvekt
+		mov al,62h
+		out 20h,al
+		mov al,61h
+		out 0A0h,al
+		pop es
+		pop ds
+		pop bp
+		pop si
+		pop di
+		pop bx
+		pop cx
+		mov dx,0305h
+		in al,(dx)
+		xor al,0FFh
+		jnz more
+		pop dx
+		pop ax
+		sti
+		iret
+int		endp
+;
+		include intvekt.asm
+		include inttable.asm
+		include clivekt.asm
+		include alarm.asm
+		include period.asm
+		include clockint.asm
+		include resin.asm
+		include dbint.asm
+		include nolegint.asm
+		include dispint.asm
+		include get.asm
+;
+im_master	dw 1 dup (?)
+;
+im_slave	dw 1 dup (?)
+;
+disptype	dw 1 dup (?)
+;
+last_adr 	dw 1 dup (?)
+;
+cseg		ends
+		end
+

BIN
PC/PC4680/PC4680/INT_ATMO.EXE


+ 622 - 0
PC/PC4680/PC4680/INT_ATMO.LST

@@ -0,0 +1,622 @@
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-1
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 	 	 	 	;
+ 	 	 	 	;------------ STACK ---------------------------
+	 	 	 	-----
+ 	 	 	 	;
+ 0000	 	 	 	stack	segment para stack 'stack'
+ 0000  0100 [	 	 	 	 	db 256 dup ('stack   ')
+               73 74 61 63	
+               6B 20 20 20	
+                            ]	
+ 	 	 	 	
+ 0800	 	 	 	stack	ends
+ 	 	 	 	;
+ 	 	 	 	;----------------------------------------------
+	 	 	 	-------
+ 	 	 	 	;
+ 	 	 	 	;
+ 	 	 	 	;------------ CODE ----------------------------
+	 	 	 	------
+ 	 	 	 	;
+ 0000	 	 	 	cseg	 	segment para public 'code'
+ 	 	 	 	 	 	assume cs:cseg,ds:cseg,es:cseg,
+	 	 	 	ss:stack
+ 	 	 	 	;
+ 	 	 	 	;---------- INITINT ---------------------------
+	 	 	 	-----
+ 	 	 	 	;
+ 0000	 	 	 	intatmo	proc far
+ 0000  FA	 	 	        	cli
+ 0001  1E	 	 	 	 	push ds
+ 0002  06	 	 	 	 	push es
+ 0003  8C CA	 	 	 	 	mov dx,cs
+ 0005  8E C2	 	 	 	 	mov es,dx
+ 0007  8E DA	 	 	 	 	mov ds,dx
+ 0009  8D 16 003A R	 	 	 	lea dx,int
+ 000D  B8 2571	 	 	 	 	mov ax,2571h
+ 0010  CD 21	 	 	 	 	int 21h
+ 0012  E4 A1	 	 	 	 	in al,0A1h
+ 0014  24 FD	 	 	 	 	and al,0FDh
+ 0016  E6 A1	 	 	 	 	out 0A1h,al
+ 0018  BA 0300	 	 	 	 	mov dx,0300h
+ 001B  B4 0C	 	 	 	 	mov ah,0Ch
+ 001D  E8 0266 R	 	 	 	call get
+ 0020  C7 06 029F R B000	         	mov disptype,0B000h
+ 0026  8D 06 02A1 R	 	     	lea ax,last_adr
+ 002A  25 FFF0	 	 	 	 	and ax,0FFF0h
+ 002D  05 0010	 	 	 	 	add ax,0010h
+ 0030  8B D0	 	 	 	 	mov dx,ax
+ 0032  B8 3100	 	 	 	 	mov ax,3100h
+ 0035  07	 	 	 	 	pop es
+ 0036  1F	 	 	 	 	pop ds
+ 0037  FB	 	 	 	 	sti
+ 0038  CD 21	 	 	 	 	int 21h
+ 003A	 	 	 	intatmo	endp
+ 	 	 	 	;
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-2
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 	 	 	 	;---------- INT -------------------------------
+	 	 	 	---------
+ 	 	 	 	;
+ 003A	 	 	 	int	 	proc far
+ 003A  FA	 	 	         	cli
+ 003B  50	 	 	 	 	push ax
+ 003C  52	 	 	 	 	push dx
+ 003D  51	 	 	more:	push cx
+ 003E  53	 	 	 	 	push bx
+ 003F  57	 	 	 	 	push di
+ 0040  56	 	 	 	 	push si
+ 0041  55	 	 	 	 	push bp
+ 0042  1E	 	 	 	 	push ds
+ 0043  06	 	 	 	 	push es
+ 0044  8C C8	 	 	 	 	mov ax,cs
+ 0046  8E D8	 	 	 	 	mov ds,ax
+ 0048  8E C0	 	 	 	 	mov es,ax
+ 004A  BD 0000	 	 	 	 	mov bp,0
+ 004D  BA 0300	 	 	 	 	mov dx,0300h
+ 0050  E8 006E R	 	 	 	call intvekt
+ 0053  B0 62	 	 	 	 	mov al,62h
+ 0055  E6 20	 	 	 	 	out 20h,al
+ 0057  B0 61	 	 	 	 	mov al,61h
+ 0059  E6 A0	 	 	 	 	out 0A0h,al
+ 005B  07	 	 	 	 	pop es
+ 005C  1F	 	 	 	 	pop ds
+ 005D  5D	 	 	 	 	pop bp
+ 005E  5E	 	 	 	 	pop si
+ 005F  5F	 	 	 	 	pop di
+ 0060  5B	 	 	 	 	pop bx
+ 0061  59	 	 	 	 	pop cx
+ 0062  BA 0305	 	 	 	 	mov dx,0305h
+ 0065  EC	 	 	 	 	in al,(dx)
+ 0066  34 FF	 	 	 	 	xor al,0FFh
+ 0068  75 D3	 	 	 	 	jnz more
+ 006A  5A	 	 	 	 	pop dx
+ 006B  58	 	 	 	 	pop ax
+ 006C  FB	 	 	 	 	sti
+ 006D  CF	 	 	 	 	iret
+ 006E	 	 	 	int	 	endp
+ 	 	 	 	;
+                             C	 	 	include intvekt.asm
+                             C	;---------- INTVEKT ---------------------------
+	 	 	 	-----------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  AX,BX,CX changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	-----------------
+                             C	;
+ 006E                        C	intvekt	proc near
+ 006E  52                    C	 	 	push dx
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-3
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 006F  83 C2 05              C	 	 	add dx,05h
+ 0072  EC                    C	 	 	in al,(dx)
+ 0073  5A                    C	 	 	pop dx
+ 0074  8A C8                 C	 	 	mov cl,al
+ 0076  B5 05                 C	 	 	mov ch,05h
+ 0078  B8 0008               C	 	 	mov ax,0008h
+ 007B  8D 1E 009B R          C	 	 	lea bx,inttable
+ 007F  50                    C	test_bit:	push ax
+ 0080  53                    C	 	 	push bx
+ 0081  51                    C	 	 	push cx
+ 0082  52                    C	 	 	push dx
+ 0083  F6 C1 01              C	 	 	test cl,01h
+ 0086  75 08                 C	 	 	jnz nextint
+ 0088  F6 ED                 C	 	 	imul ch
+ 008A  2C 05                 C	 	 	sub al,05h
+ 008C  03 D8                 C	 	 	add bx,ax
+ 008E  FF E3                 C	 	 	jmp bx
+ 0090  5A                    C	nextint:	pop dx
+ 0091  59                    C	 	 	pop cx
+ 0092  5B                    C	 	 	pop bx
+ 0093  58                    C	 	 	pop ax
+ 0094  D0 E9                 C	 	 	shr cl,1
+ 0096  FE C8                 C	 	 	dec al
+ 0098  75 E5                 C	 	 	jnz test_bit
+ 009A  C3                    C	 	 	ret
+ 009B                        C	intvekt	endp
+                             C	 	 	include inttable.asm
+                             C	;---------- INTTABLE --------------------------
+	 	 	 	------------
+                             C	;
+                             C	;  Interrupt routin call table for 'intvekt'
+                             C	;
+                             C	;  No registers changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	------------
+                             C	;
+ 009B                        C	inttable	proc near
+                             C	;
+ 009B  E8 019C R             C	bit_7:	call resin
+ 009E  EB F0                 C	 	 	jmp nextint
+ 00A0  E8 01CE R             C	bit_6:	call dbint
+ 00A3  EB EB                 C	 	 	jmp nextint
+ 00A5  E8 0210 R             C	bit_5:	call nolegint
+ 00A8  EB E6                 C	 	 	jmp nextint
+ 00AA  E8 0210 R             C	bit_4:	call nolegint
+ 00AD  EB E1                 C	 	 	jmp nextint
+ 00AF  E8 0210 R             C	bit_3:	call nolegint
+ 00B2  EB DC                 C	 	 	jmp nextint
+ 00B4  E8 0210 R             C	bit_2:	call nolegint
+ 00B7  EB D7                 C	 	 	jmp nextint
+ 00B9  E8 0210 R             C	bit_1:	call nolegint
+ 00BC  EB D2                 C	 	 	jmp nextint
+ 00BE  E8 00C3 R             C	bit_0:	call clivekt
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-4
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 00C1  EB CD                 C	 	 	jmp nextint
+                             C	;
+ 00C3                        C	inttable	endp
+                             C	 	 	include clivekt.asm
+                             C	;--------- CLIVEKT ----------------------------
+	 	 	 	---------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  Interrupt routine call select for clock inte
+	 	 	 	rrupts
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------
+                             C	;
+ 00C3                        C	clivekt	proc near
+ 00C3  B4 0B                 C	 	 	mov ah,0Bh
+ 00C5  E8 0266 R             C	 	 	call get
+ 00C8  8A C1                 C	 	 	mov al,cl
+ 00CA  0C 8F                 C	 	 	or al,8Fh
+ 00CC  50                    C	 	 	push ax
+ 00CD  B4 0C                 C	 	 	mov ah,0Ch
+ 00CF  E8 0266 R             C	 	 	call get
+ 00D2  58                    C	 	 	pop ax
+ 00D3  22 C8                 C	 	 	and cl,al
+ 00D5  8B D9                 C	 	 	mov bx,cx
+ 00D7  F6 C1 80              C	IRQF:	test cl,80h
+ 00DA  74 1C                 C	 	 	jz exit
+ 00DC  F6 C1 40              C	PF:	 	test cl,40h
+ 00DF  74 05                 C	 	 	jz AF
+ 00E1  E8 012B R             C	 	 	call period
+ 00E4  8B CB                 C	 	 	mov cx,bx
+ 00E6  F6 C1 20              C	AF:   	test cl,20h
+ 00E9  74 05                 C	 	 	jz UF
+ 00EB  E8 00FB R             C	 	 	call alarm
+ 00EE  8B CB                 C	 	 	mov cx,bx
+ 00F0  F6 C1 10              C	UF: 	 	test cl,10h
+ 00F3  74 03                 C	 	 	jz exit
+ 00F5  E8 0144 R             C	 	 	call clockint
+ 00F8  8B CB                 C	exit:	mov cx,bx
+ 00FA  C3                    C	     	ret
+ 00FB                        C	clivekt	endp
+                             C	 	 	include alarm.asm
+                             C	;---------- ALARM -----------------------------
+	 	 	 	----------------
+                             C	;
+                             C	;  Routine for alarminterrupt from clock
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+                             C	;
+ 00FB                        C	alarm	proc near
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-5
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 00FB  8D 36 0121 R          C	 	 	lea si,ala_str
+ 00FF  BF 0136               C	 	 	mov di,310
+ 0102  B9 000A               C	 	 	mov cx,10
+ 0105  E8 0258 R             C	 	 	call dispint
+ 0108  50                    C	 	 	push ax
+ 0109  E4 61                 C	 	 	in al,61h
+ 010B  0C 03                 C	 	 	or al,03h
+ 010D  E6 61                 C	 	 	out 61h,al
+ 010F  50                    C	 	 	push ax
+ 0110  B8 2000               C	 	 	mov ax,2000h
+ 0113  50                    C	loopa:	push ax
+ 0114  58                    C	 	 	pop ax
+ 0115  50                    C	 	 	push ax
+ 0116  58                    C	 	 	pop ax
+ 0117  48                    C	 	 	dec ax
+ 0118  75 F9                 C	 	 	jnz loopa
+ 011A  58                    C	 	 	pop ax
+ 011B  24 FC                 C	 	 	and al,0FCh
+ 011D  E6 61                 C	 	 	out 61h,al
+ 011F  58                    C	 	 	pop ax
+ 0120  C3                    C	 	 	ret
+                             C	;
+ 0121  41 0F 4C 0F 41 0F     C	ala_str:	db 'ALARM'
+       52 0F 4D 0F           C	
+                             C	;
+ 012B                        C	alarm	endp
+                             C	 	 	include period.asm
+                             C	;---------- PERIOD ----------------------------
+	 	 	 	----------
+                             C	;
+                             C	;  Interrupt routine for periodic interrupt fro
+	 	 	 	m clock
+                             C	;
+                             C	;  No registers changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------
+                             C	;
+ 012B                        C	period	proc near
+ 012B  50                    C	 	 	push ax
+ 012C  E4 61                 C	 	 	in al,61h
+ 012E  0C 03                 C	 	 	or al,03h
+ 0130  E6 61                 C	 	 	out 61h,al
+ 0132  50                    C	 	 	push ax
+ 0133  B8 0010               C	 	 	mov ax,0010h
+ 0136  50                    C	loop:	push ax
+ 0137  58                    C	 	 	pop ax
+ 0138  50                    C	 	 	push ax
+ 0139  58                    C	 	 	pop ax
+ 013A  48                    C	 	 	dec ax
+ 013B  75 F9                 C	 	 	jnz loop
+ 013D  58                    C	 	 	pop ax
+ 013E  24 FC                 C	 	 	and al,0FCh
+ 0140  E6 61                 C	 	 	out 61h,al
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-6
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 0142  58                    C	 	 	pop ax
+ 0143  C3                    C	 	 	ret
+ 0144                        C	period	endp
+                             C	 	 	include clockint.asm
+                             C	;------------ CLOCKINT ------------------------
+	 	 	 	----------------
+                             C	;
+                             C	; DX=PC4680 base adress
+                             C	;
+                             C	;  AX,CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+ 0144                        C	clockint	proc near
+ 0144  8D 36 018C R          C	 	 	lea si,cli_str
+ 0148  BF 0090               C	 	 	mov di,90h
+ 014B  B9 0010               C	 	 	mov cx,10h
+ 014E  56                    C	 	 	push si
+ 014F  51                    C	 	 	push cx
+ 0150  83 C6 0E              C	 	 	add si,0Eh
+ 0153  B4 00                 C	 	 	mov ah,00h
+ 0155  E8 0266 R             C	next:	call get
+ 0158  8A E9                 C	 	 	mov ch,cl
+ 015A  81 E1 F00F            C	 	 	and cx,0F00Fh
+ 015E  D0 CD                 C	 	 	ror ch,1
+ 0160  D0 CD                 C	 	 	ror ch,1
+ 0162  D0 CD                 C	 	 	ror ch,1
+ 0164  D0 CD                 C	 	 	ror ch,1
+ 0166  81 C1 3030            C	 	 	add cx,3030h
+ 016A  2E: 88 0C             C	 	 	mov cs:[si],cl
+ 016D  4E                    C	 	 	dec si
+ 016E  4E                    C	 	 	dec si
+ 016F  2E: 88 2C             C	 	 	mov cs:[si],ch
+ 0172  4E                    C	 	 	dec si
+ 0173  4E                    C	 	 	dec si
+ 0174  F6 C4 04              C	 	 	test ah,4
+ 0177  75 0D                 C	 	 	jnz display
+ 0179  FE C4                 C	 	 	inc ah
+ 017B  FE C4                 C	 	 	inc ah
+ 017D  B0 3A                 C	 	 	mov al,3Ah
+ 017F  2E: 88 04             C	 	 	mov cs:[si],al
+ 0182  4E                    C	 	 	dec si
+ 0183  4E                    C	 	 	dec si
+ 0184  EB CF                 C	 	 	jmp next
+ 0186  59                    C	display:	pop cx
+ 0187  5E                    C	 	 	pop si
+ 0188  E8 0258 R             C	 	 	call dispint
+ 018B  C3                    C	 	 	ret
+                             C	;
+ 018C     08 [               C	cli_str: 	dw 8 dup (' ')
+                0F20         C	
+                      ]      C	
+                             C	
+                             C	;
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-7
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 019C                        C	clockint	endp
+                             C	 	 	include resin.asm
+                             C	;------------ RESIN ---------------------------
+	 	 	 	----------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+ 019C                        C	resin	proc near
+ 019C  8D 36 01AA R          C	 	 	lea si,res_str
+ 01A0  BF 0000               C	 	 	mov di,0000
+ 01A3  B9 0024               C	 	 	mov cx,36
+ 01A6  E8 0258 R             C	 	 	call dispint
+ 01A9  C3                    C	 	 	ret
+                             C	;
+ 01AA  52 0F 65 0F 73 0F     C	res_str:	db 'Reset on DataB
+	 	 	 	oard'
+       65 0F 74 0F 20 0F     C	
+       6F 0F 6E 0F 20 0F     C	
+       44 0F 61 0F 74 0F     C	
+       61 0F 42 0F 6F 0F     C	
+       61 0F 72 0F 64 0F     C	
+                             C	;
+ 01CE                        C	resin	endp
+                             C	 	 	include dbint.asm
+                             C	;------------ DBINT ---------------------------
+	 	 	 	---------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------------
+ 01CE                        C	dbint	proc near
+ 01CE  8D 36 01E4 R          C	 	 	lea si,dbi_str
+ 01D2  BF 0026               C	 	 	mov di,0038
+ 01D5  B9 002C               C	 	 	mov cx,44
+ 01D8  E8 0258 R             C	 	 	call dispint
+ 01DB  50                    C	 	 	push ax
+ 01DC  52                    C	 	 	push dx
+ 01DD  BA 0307               C	 	 	mov dx,0307h
+ 01E0  EC                    C	 	 	in al,(dx)
+ 01E1  5A                    C	 	 	pop dx
+ 01E2  58                    C	 	 	pop ax
+ 01E3  C3                    C	 	 	ret
+                             C	;
+ 01E4  49 0F 6E 0F 74 0F     C	dbi_str:	db 'Interrupt on D
+	 	 	 	ataBoard'
+       65 0F 72 0F 72 0F     C	
+       75 0F 70 0F 74 0F     C	
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-8
+	 	 	 	 	 	 	 	06-05-86    
+
+
+       20 0F 6F 0F 6E 0F     C	
+       20 0F 44 0F 61 0F     C	
+       74 0F 61 0F 42 0F     C	
+       6F 0F 61 0F 72 0F     C	
+       64 0F                 C	
+                             C	;
+ 0210                        C	dbint	endp
+                             C	 	 	include nolegint.asm
+                             C	;------------ NOLEGINT ------------------------
+	 	 	 	------------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	------------------
+ 0210                        C	nolegint	proc near
+ 0210  8D 36 021E R          C	 	 	lea si,nli_str
+ 0214  BF 0054               C	 	 	mov di,0084
+ 0217  B9 003A               C	 	 	mov cx,58
+ 021A  E8 0258 R             C	 	 	call dispint
+ 021D  C3                    C	 	 	ret
+                             C	;
+ 021E  49 0F 6C 0F 6C 0F     C	nli_str:	db 'Illegal interr
+	 	 	 	upt has occured'
+       65 0F 67 0F 61 0F     C	
+       6C 0F 20 0F 69 0F     C	
+       6E 0F 74 0F 65 0F     C	
+       72 0F 72 0F 75 0F     C	
+       70 0F 74 0F 20 0F     C	
+       68 0F 61 0F 73 0F     C	
+       20 0F 6F 0F 63 0F     C	
+       63 0F 75 0F 72 0F     C	
+       65 0F 64 0F           C	
+                             C	;
+ 0258                        C	nolegint	endp
+                             C	 	 	include dispint.asm
+                             C	;------------ DISPINT -------------------------
+	 	 	 	---------------
+                             C	;
+                             C	;  SI=Startadress of string to display
+                             C	;  DI=Destinationadress for string
+                             C	;  CX=String length
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------------
+ 0258                        C	dispint	proc near
+ 0258  06                    C	 	 	push es
+ 0259  52                    C	 	 	push dx
+ 025A  8B 16 029F R          C	 	 	mov dx,disptype
+ 025E  8E C2                 C	 	 	mov es,dx
+ 0260  FC                    C	 	 	cld
+ 0261  F3/ A4                C	 	 	rep movsb
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-9
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 0263  5A                    C	 	 	pop dx
+ 0264  07                    C	 	 	pop es
+ 0265  C3                    C	 	 	ret
+ 0266                        C	dispint	endp
+                             C	 	 	include get.asm
+                             C	;---------- L„s data fr†n klockan i PC4680 ----
+	 	 	 	--------------------
+                             C	;
+                             C	;    DX=basadress f”r kortet
+                             C	;    AH=adress i klockan
+                             C	;    CL=data fr†n klockan
+                             C	;
+                             C	;  AX,CX changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	--------------------
+ 0266                        C	get  	 	proc near
+ 0266  52                    C	 	 	push dx
+ 0267  B0 83                 C	     	mov al,83H
+ 0269  83 C2 0F              C	 	 	add dx,0Fh
+ 026C  EE                    C	 	 	out (DX),AL
+ 026D  4A                    C	 	 	dec dx
+ 026E  B0 D0                 C	 	 	mov al,0DH*10H
+ 0270  EE                    C	 	 	out (DX),al
+ 0271  B0 50                 C	 	 	mov al,5*10H
+ 0273  EE                    C	 	 	out (DX),al
+ 0274  B0 70                 C	 	 	mov al,7*10H
+ 0276  EE                    C	 	 	out (DX),al
+ 0277  8A C4                 C	 	 	mov al,ah
+ 0279  4A                    C	 	 	dec dx
+ 027A  4A                    C	 	 	dec dx
+ 027B  EE                    C	 	 	out (DX),al
+ 027C  B0 60                 C	 	 	mov al,6*10H
+ 027E  42                    C	 	 	inc dx
+ 027F  42                    C	 	 	inc dx
+ 0280  EE                    C	 	 	out (DX),al
+ 0281  B0 40                 C	 	 	mov al,4*10H
+ 0283  EE                    C	 	 	out (DX),al
+ 0284  B0 C0                 C	 	 	mov al,0CH*10H
+ 0286  EE                    C	 	 	out (DX),al
+ 0287  B0 93                 C	 	 	mov al,93H
+ 0289  42                    C	 	 	inc dx
+ 028A  EE                    C	 	 	out (DX),al
+ 028B  4A                    C	 	 	dec dx
+ 028C  4A                    C	 	 	dec dx
+ 028D  4A                    C	 	 	dec dx
+ 028E  EC                    C	 	 	in al,(DX)
+ 028F  8A C8                 C	 	 	mov cl,al
+ 0291  B0 50                 C	 	 	mov al,5*10H
+ 0293  42                    C	 	 	inc dx
+ 0294  42                    C	 	 	inc dx
+ 0295  EE                    C	 	 	out (DX),al
+ 0296  B0 D0                 C	 	 	mov al,0DH*10H
+ 0298  EE                    C	 	 	out (DX),al
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-10
+	 	 	 	 	 	 	 	06-05-86    
+
+
+ 0299  5A                    C	 	 	pop dx
+ 029A  C3                    C	 	 	ret
+ 029B                        C	get	 	endp
+ 	 	 	 	;
+ 029B     01 [	 	 	im_master	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 029D     01 [	 	 	im_slave	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 029F     01 [	 	 	disptype	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02A1     01 [	 	 	last_adr 	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02A3	 	 	 	cseg	 	ends
+ 	 	 	 	 	 	end
+
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	Symbols
+	 	 	 	-1
+	 	 	 	 	 	 	 	06-05-86    
+
+
+Segments and Groups:
+
+	 	N a m e	 	 	Size	Align	Combine	Class
+
+CSEG . . . . . . . . . . . . . .	02A3	PARA  	PUBLIC	'CODE'
+STACK. . . . . . . . . . . . . .	0800	PARA  	STACK 	'STACK'
+
+Symbols:            
+
+	 	N a m e	 	 	Type	Value	Attr         
+
+AF . . . . . . . . . . . . . . .	L NEAR 	00E6	CSEG
+ALARM. . . . . . . . . . . . . .	N PROC	00FB	CSEG	Length =0030
+ALA_STR. . . . . . . . . . . . .	L NEAR 	0121	CSEG
+BIT_0. . . . . . . . . . . . . .	L NEAR 	00BE	CSEG
+BIT_1. . . . . . . . . . . . . .	L NEAR 	00B9	CSEG
+BIT_2. . . . . . . . . . . . . .	L NEAR 	00B4	CSEG
+BIT_3. . . . . . . . . . . . . .	L NEAR 	00AF	CSEG
+BIT_4. . . . . . . . . . . . . .	L NEAR 	00AA	CSEG
+BIT_5. . . . . . . . . . . . . .	L NEAR 	00A5	CSEG
+BIT_6. . . . . . . . . . . . . .	L NEAR 	00A0	CSEG
+BIT_7. . . . . . . . . . . . . .	L NEAR 	009B	CSEG
+CLIVEKT. . . . . . . . . . . . .	N PROC	00C3	CSEG	Length =0038
+CLI_STR. . . . . . . . . . . . .	L NEAR 	018C	CSEG
+CLOCKINT . . . . . . . . . . . .	N PROC	0144	CSEG	Length =0058
+DBINT. . . . . . . . . . . . . .	N PROC	01CE	CSEG	Length =0042
+DBI_STR. . . . . . . . . . . . .	L NEAR 	01E4	CSEG
+DISPINT. . . . . . . . . . . . .	N PROC	0258	CSEG	Length =000E
+DISPLAY. . . . . . . . . . . . .	L NEAR 	0186	CSEG
+DISPTYPE . . . . . . . . . . . .	L WORD 	029F	CSEG
+EXIT . . . . . . . . . . . . . .	L NEAR 	00F8	CSEG
+GET. . . . . . . . . . . . . . .	N PROC	0266	CSEG	Length =0035
+IM_MASTER. . . . . . . . . . . .	L WORD 	029B	CSEG
+IM_SLAVE . . . . . . . . . . . .	L WORD 	029D	CSEG
+INT. . . . . . . . . . . . . . .	F PROC	003A	CSEG	Length =0034
+INTATMO. . . . . . . . . . . . .	F PROC	0000	CSEG	Length =003A
+INTTABLE . . . . . . . . . . . .	N PROC	009B	CSEG	Length =0028
+INTVEKT. . . . . . . . . . . . .	N PROC	006E	CSEG	Length =002D
+IRQF . . . . . . . . . . . . . .	L NEAR 	00D7	CSEG
+LAST_ADR . . . . . . . . . . . .	L WORD 	02A1	CSEG
+LOOP . . . . . . . . . . . . . .	L NEAR 	0136	CSEG
+LOOPA. . . . . . . . . . . . . .	L NEAR 	0113	CSEG
+MORE . . . . . . . . . . . . . .	L NEAR 	003D	CSEG
+NEXT . . . . . . . . . . . . . .	L NEAR 	0155	CSEG
+NEXTINT. . . . . . . . . . . . .	L NEAR 	0090	CSEG
+NLI_STR. . . . . . . . . . . . .	L NEAR 	021E	CSEG
+NOLEGINT . . . . . . . . . . . .	N PROC	0210	CSEG	Length =0048
+PERIOD . . . . . . . . . . . . .	N PROC	012B	CSEG	Length =0019
+PF . . . . . . . . . . . . . . .	L NEAR 	00DC	CSEG
+RESIN. . . . . . . . . . . . . .	N PROC	019C	CSEG	Length =0032
+RES_STR. . . . . . . . . . . . .	L NEAR 	01AA	CSEG
+TEST_BIT . . . . . . . . . . . .	L NEAR 	007F	CSEG
+UF . . . . . . . . . . . . . . .	L NEAR 	00F0	CSEG
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	Symbols
+	 	 	 	-2
+	 	 	 	 	 	 	 	06-05-86    
+
+
+
+48684 Bytes free   
+
+Warning Severe
+Errors	Errors 
+0	0

+ 113 - 0
PC/PC4680/PC4680/INT_XT.ASM

@@ -0,0 +1,113 @@
+;
+;------------ STACK --------------------------------
+;
+stack	segment para stack 'stack'
+		db 256 dup ('stack   ')
+stack	ends
+;
+;-----------------------------------------------------
+;
+;
+;------------ CODE ----------------------------------
+;
+cseg		segment para public 'code'
+		assume cs:cseg,ds:cseg,es:cseg,ss:stack
+;
+;---------- INITINT --------------------------------
+;
+intxt	proc far
+        	cli
+		push ds
+		push es
+		mov dx,cs
+		mov es,dx
+		mov ds,dx
+		lea dx,int
+		mov ax,250Ah
+		int 21h
+		in al,21h
+		and al,0FBh
+		mov intmask,ax
+		out 21h,al
+		mov dx,0300h
+		mov ah,0Ch
+		call get
+		in al,61h
+		or al,08h
+		out 61h,al
+		in al,62h
+		test al,01h
+		jnz monodisp
+		mov disptype,0B800h
+		jmp last
+monodisp:	mov disptype,0B000h
+last:	lea ax,last_adr
+		and ax,0FFF0h
+		add ax,0010h
+		mov dx,ax
+		mov ax,3100h
+		pop es
+		pop ds
+		sti
+		int 21h
+intxt	endp
+;
+;---------- INT ----------------------------------------
+;
+int		proc far
+         	cli
+		push ax
+		push dx
+more:	push cx
+		push bx
+		push di
+		push si
+		push bp
+		push ds
+		push es
+		mov ax,cs
+		mov ds,ax
+		mov es,ax
+		mov bp,0
+		mov dx,0300h
+		call intvekt
+		mov al,62h
+		out 20h,al
+		pop es
+		pop ds
+		pop bp
+		pop si
+		pop di
+		pop bx
+		pop cx
+		mov dx,0305h
+		in al,(dx)
+		xor al,0FFh
+		jnz more
+		pop dx
+		pop ax
+		sti
+		iret
+int		endp
+;
+		include intvekt.asm
+		include inttable.asm
+		include clivekt.asm
+		include alarm.asm
+		include period.asm
+		include clockint.asm
+		include resin.asm
+		include dbint.asm
+		include nolegint.asm
+		include dispint.asm
+		include get.asm
+;
+intmask	dw 1 dup(?)
+;
+disptype	dw 1 dup (?)
+;
+last_adr 	dw 1 dup(?)
+;
+cseg		ends
+		end
+

BIN
PC/PC4680/PC4680/INT_XT.EXE


+ 625 - 0
PC/PC4680/PC4680/INT_XT.LST

@@ -0,0 +1,625 @@
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-1
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 	 	 	 	;
+ 	 	 	 	;------------ STACK ---------------------------
+	 	 	 	-----
+ 	 	 	 	;
+ 0000	 	 	 	stack	segment para stack 'stack'
+ 0000  0100 [	 	 	 	 	db 256 dup ('stack   ')
+               73 74 61 63	
+               6B 20 20 20	
+                            ]	
+ 	 	 	 	
+ 0800	 	 	 	stack	ends
+ 	 	 	 	;
+ 	 	 	 	;----------------------------------------------
+	 	 	 	-------
+ 	 	 	 	;
+ 	 	 	 	;
+ 	 	 	 	;------------ CODE ----------------------------
+	 	 	 	------
+ 	 	 	 	;
+ 0000	 	 	 	cseg	 	segment para public 'code'
+ 	 	 	 	 	 	assume cs:cseg,ds:cseg,es:cseg,
+	 	 	 	ss:stack
+ 	 	 	 	;
+ 	 	 	 	;---------- INITINT ---------------------------
+	 	 	 	-----
+ 	 	 	 	;
+ 0000	 	 	 	intxt	proc far
+ 0000  FA	 	 	        	cli
+ 0001  1E	 	 	 	 	push ds
+ 0002  06	 	 	 	 	push es
+ 0003  8C CA	 	 	 	 	mov dx,cs
+ 0005  8E C2	 	 	 	 	mov es,dx
+ 0007  8E DA	 	 	 	 	mov ds,dx
+ 0009  8D 16 0052 R	 	 	 	lea dx,int
+ 000D  B8 250A	 	 	 	 	mov ax,250Ah
+ 0010  CD 21	 	 	 	 	int 21h
+ 0012  E4 21	 	 	 	 	in al,21h
+ 0014  24 FB	 	 	 	 	and al,0FBh
+ 0016  A3 02AF R	 	 	 	mov intmask,ax
+ 0019  E6 21	 	 	 	 	out 21h,al
+ 001B  BA 0300	 	 	 	 	mov dx,0300h
+ 001E  B4 0C	 	 	 	 	mov ah,0Ch
+ 0020  E8 027A R	 	 	 	call get
+ 0023  E4 61	 	 	 	 	in al,61h
+ 0025  0C 08	 	 	 	 	or al,08h
+ 0027  E6 61	 	 	 	 	out 61h,al
+ 0029  E4 62	 	 	 	 	in al,62h
+ 002B  A8 01	 	 	 	 	test al,01h
+ 002D  75 09	 	 	 	 	jnz monodisp
+ 002F  C7 06 02B1 R B800	 	 	mov disptype,0B800h
+ 0035  EB 07 90	 	 	 	 	jmp last
+ 0038  C7 06 02B1 R B000	monodisp:	mov disptype,0B000h
+ 003E  8D 06 02B3 R	 	last:	lea ax,last_adr
+ 0042  25 FFF0	 	 	 	 	and ax,0FFF0h
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-2
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 0045  05 0010	 	 	 	 	add ax,0010h
+ 0048  8B D0	 	 	 	 	mov dx,ax
+ 004A  B8 3100	 	 	 	 	mov ax,3100h
+ 004D  07	 	 	 	 	pop es
+ 004E  1F	 	 	 	 	pop ds
+ 004F  FB	 	 	 	 	sti
+ 0050  CD 21	 	 	 	 	int 21h
+ 0052	 	 	 	intxt	endp
+ 	 	 	 	;
+ 	 	 	 	;---------- INT -------------------------------
+	 	 	 	---------
+ 	 	 	 	;
+ 0052	 	 	 	int	 	proc far
+ 0052  FA	 	 	         	cli
+ 0053  50	 	 	 	 	push ax
+ 0054  52	 	 	 	 	push dx
+ 0055  51	 	 	more:	push cx
+ 0056  53	 	 	 	 	push bx
+ 0057  57	 	 	 	 	push di
+ 0058  56	 	 	 	 	push si
+ 0059  55	 	 	 	 	push bp
+ 005A  1E	 	 	 	 	push ds
+ 005B  06	 	 	 	 	push es
+ 005C  8C C8	 	 	 	 	mov ax,cs
+ 005E  8E D8	 	 	 	 	mov ds,ax
+ 0060  8E C0	 	 	 	 	mov es,ax
+ 0062  BD 0000	 	 	 	 	mov bp,0
+ 0065  BA 0300	 	 	 	 	mov dx,0300h
+ 0068  E8 0082 R	 	 	 	call intvekt
+ 006B  B0 62	 	 	 	 	mov al,62h
+ 006D  E6 20	 	 	 	 	out 20h,al
+ 006F  07	 	 	 	 	pop es
+ 0070  1F	 	 	 	 	pop ds
+ 0071  5D	 	 	 	 	pop bp
+ 0072  5E	 	 	 	 	pop si
+ 0073  5F	 	 	 	 	pop di
+ 0074  5B	 	 	 	 	pop bx
+ 0075  59	 	 	 	 	pop cx
+ 0076  BA 0305	 	 	 	 	mov dx,0305h
+ 0079  EC	 	 	 	 	in al,(dx)
+ 007A  34 FF	 	 	 	 	xor al,0FFh
+ 007C  75 D7	 	 	 	 	jnz more
+ 007E  5A	 	 	 	 	pop dx
+ 007F  58	 	 	 	 	pop ax
+ 0080  FB	 	 	 	 	sti
+ 0081  CF	 	 	 	 	iret
+ 0082	 	 	 	int	 	endp
+ 	 	 	 	;
+                             C	 	 	include intvekt.asm
+                             C	;---------- INTVEKT ---------------------------
+	 	 	 	-----------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-3
+	 	 	 	 	 	 	 	05-29-86    
+
+
+                             C	;  AX,BX,CX changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	-----------------
+                             C	;
+ 0082                        C	intvekt	proc near
+ 0082  52                    C	 	 	push dx
+ 0083  83 C2 05              C	 	 	add dx,05h
+ 0086  EC                    C	 	 	in al,(dx)
+ 0087  5A                    C	 	 	pop dx
+ 0088  8A C8                 C	 	 	mov cl,al
+ 008A  B5 05                 C	 	 	mov ch,05h
+ 008C  B8 0008               C	 	 	mov ax,0008h
+ 008F  8D 1E 00AF R          C	 	 	lea bx,inttable
+ 0093  50                    C	test_bit:	push ax
+ 0094  53                    C	 	 	push bx
+ 0095  51                    C	 	 	push cx
+ 0096  52                    C	 	 	push dx
+ 0097  F6 C1 01              C	 	 	test cl,01h
+ 009A  75 08                 C	 	 	jnz nextint
+ 009C  F6 ED                 C	 	 	imul ch
+ 009E  2C 05                 C	 	 	sub al,05h
+ 00A0  03 D8                 C	 	 	add bx,ax
+ 00A2  FF E3                 C	 	 	jmp bx
+ 00A4  5A                    C	nextint:	pop dx
+ 00A5  59                    C	 	 	pop cx
+ 00A6  5B                    C	 	 	pop bx
+ 00A7  58                    C	 	 	pop ax
+ 00A8  D0 E9                 C	 	 	shr cl,1
+ 00AA  FE C8                 C	 	 	dec al
+ 00AC  75 E5                 C	 	 	jnz test_bit
+ 00AE  C3                    C	 	 	ret
+ 00AF                        C	intvekt	endp
+                             C	 	 	include inttable.asm
+                             C	;---------- INTTABLE --------------------------
+	 	 	 	------------
+                             C	;
+                             C	;  Interrupt routin call table for 'intvekt'
+                             C	;
+                             C	;  No registers changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	------------
+                             C	;
+ 00AF                        C	inttable	proc near
+                             C	;
+ 00AF  E8 01B0 R             C	bit_7:	call resin
+ 00B2  EB F0                 C	 	 	jmp nextint
+ 00B4  E8 01E2 R             C	bit_6:	call dbint
+ 00B7  EB EB                 C	 	 	jmp nextint
+ 00B9  E8 0224 R             C	bit_5:	call nolegint
+ 00BC  EB E6                 C	 	 	jmp nextint
+ 00BE  E8 0224 R             C	bit_4:	call nolegint
+ 00C1  EB E1                 C	 	 	jmp nextint
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-4
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 00C3  E8 0224 R             C	bit_3:	call nolegint
+ 00C6  EB DC                 C	 	 	jmp nextint
+ 00C8  E8 0224 R             C	bit_2:	call nolegint
+ 00CB  EB D7                 C	 	 	jmp nextint
+ 00CD  E8 0224 R             C	bit_1:	call nolegint
+ 00D0  EB D2                 C	 	 	jmp nextint
+ 00D2  E8 00D7 R             C	bit_0:	call clivekt
+ 00D5  EB CD                 C	 	 	jmp nextint
+                             C	;
+ 00D7                        C	inttable	endp
+                             C	 	 	include clivekt.asm
+                             C	;--------- CLIVEKT ----------------------------
+	 	 	 	---------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  Interrupt routine call select for clock inte
+	 	 	 	rrupts
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------
+                             C	;
+ 00D7                        C	clivekt	proc near
+ 00D7  B4 0B                 C	 	 	mov ah,0Bh
+ 00D9  E8 027A R             C	 	 	call get
+ 00DC  8A C1                 C	 	 	mov al,cl
+ 00DE  0C 8F                 C	 	 	or al,8Fh
+ 00E0  50                    C	 	 	push ax
+ 00E1  B4 0C                 C	 	 	mov ah,0Ch
+ 00E3  E8 027A R             C	 	 	call get
+ 00E6  58                    C	 	 	pop ax
+ 00E7  22 C8                 C	 	 	and cl,al
+ 00E9  8B D9                 C	 	 	mov bx,cx
+ 00EB  F6 C1 80              C	IRQF:	test cl,80h
+ 00EE  74 1C                 C	 	 	jz exit
+ 00F0  F6 C1 40              C	PF:	 	test cl,40h
+ 00F3  74 05                 C	 	 	jz AF
+ 00F5  E8 013F R             C	 	 	call period
+ 00F8  8B CB                 C	 	 	mov cx,bx
+ 00FA  F6 C1 20              C	AF:   	test cl,20h
+ 00FD  74 05                 C	 	 	jz UF
+ 00FF  E8 010F R             C	 	 	call alarm
+ 0102  8B CB                 C	 	 	mov cx,bx
+ 0104  F6 C1 10              C	UF: 	 	test cl,10h
+ 0107  74 03                 C	 	 	jz exit
+ 0109  E8 0158 R             C	 	 	call clockint
+ 010C  8B CB                 C	exit:	mov cx,bx
+ 010E  C3                    C	     	ret
+ 010F                        C	clivekt	endp
+                             C	 	 	include alarm.asm
+                             C	;---------- ALARM -----------------------------
+	 	 	 	----------------
+                             C	;
+                             C	;  Routine for alarminterrupt from clock
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-5
+	 	 	 	 	 	 	 	05-29-86    
+
+
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+                             C	;
+ 010F                        C	alarm	proc near
+ 010F  8D 36 0135 R          C	 	 	lea si,ala_str
+ 0113  BF 0136               C	 	 	mov di,310
+ 0116  B9 000A               C	 	 	mov cx,10
+ 0119  E8 026C R             C	 	 	call dispint
+ 011C  50                    C	 	 	push ax
+ 011D  E4 61                 C	 	 	in al,61h
+ 011F  0C 03                 C	 	 	or al,03h
+ 0121  E6 61                 C	 	 	out 61h,al
+ 0123  50                    C	 	 	push ax
+ 0124  B8 2000               C	 	 	mov ax,2000h
+ 0127  50                    C	loopa:	push ax
+ 0128  58                    C	 	 	pop ax
+ 0129  50                    C	 	 	push ax
+ 012A  58                    C	 	 	pop ax
+ 012B  48                    C	 	 	dec ax
+ 012C  75 F9                 C	 	 	jnz loopa
+ 012E  58                    C	 	 	pop ax
+ 012F  24 FC                 C	 	 	and al,0FCh
+ 0131  E6 61                 C	 	 	out 61h,al
+ 0133  58                    C	 	 	pop ax
+ 0134  C3                    C	 	 	ret
+                             C	;
+ 0135  41 0F 4C 0F 41 0F     C	ala_str:	db 'ALARM'
+       52 0F 4D 0F           C	
+                             C	;
+ 013F                        C	alarm	endp
+                             C	 	 	include period.asm
+                             C	;---------- PERIOD ----------------------------
+	 	 	 	----------
+                             C	;
+                             C	;  Interrupt routine for periodic interrupt fro
+	 	 	 	m clock
+                             C	;
+                             C	;  No registers changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------
+                             C	;
+ 013F                        C	period	proc near
+ 013F  50                    C	 	 	push ax
+ 0140  E4 61                 C	 	 	in al,61h
+ 0142  0C 03                 C	 	 	or al,03h
+ 0144  E6 61                 C	 	 	out 61h,al
+ 0146  50                    C	 	 	push ax
+ 0147  B8 0010               C	 	 	mov ax,0010h
+ 014A  50                    C	loop:	push ax
+ 014B  58                    C	 	 	pop ax
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-6
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 014C  50                    C	 	 	push ax
+ 014D  58                    C	 	 	pop ax
+ 014E  48                    C	 	 	dec ax
+ 014F  75 F9                 C	 	 	jnz loop
+ 0151  58                    C	 	 	pop ax
+ 0152  24 FC                 C	 	 	and al,0FCh
+ 0154  E6 61                 C	 	 	out 61h,al
+ 0156  58                    C	 	 	pop ax
+ 0157  C3                    C	 	 	ret
+ 0158                        C	period	endp
+                             C	 	 	include clockint.asm
+                             C	;------------ CLOCKINT ------------------------
+	 	 	 	----------------
+                             C	;
+                             C	; DX=PC4680 base adress
+                             C	;
+                             C	;  AX,CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+ 0158                        C	clockint	proc near
+ 0158  8D 36 01A0 R          C	 	 	lea si,cli_str
+ 015C  BF 0090               C	 	 	mov di,90h
+ 015F  B9 0010               C	 	 	mov cx,10h
+ 0162  56                    C	 	 	push si
+ 0163  51                    C	 	 	push cx
+ 0164  83 C6 0E              C	 	 	add si,0Eh
+ 0167  B4 00                 C	 	 	mov ah,00h
+ 0169  E8 027A R             C	next:	call get
+ 016C  8A E9                 C	 	 	mov ch,cl
+ 016E  81 E1 F00F            C	 	 	and cx,0F00Fh
+ 0172  D0 CD                 C	 	 	ror ch,1
+ 0174  D0 CD                 C	 	 	ror ch,1
+ 0176  D0 CD                 C	 	 	ror ch,1
+ 0178  D0 CD                 C	 	 	ror ch,1
+ 017A  81 C1 3030            C	 	 	add cx,3030h
+ 017E  2E: 88 0C             C	 	 	mov cs:[si],cl
+ 0181  4E                    C	 	 	dec si
+ 0182  4E                    C	 	 	dec si
+ 0183  2E: 88 2C             C	 	 	mov cs:[si],ch
+ 0186  4E                    C	 	 	dec si
+ 0187  4E                    C	 	 	dec si
+ 0188  F6 C4 04              C	 	 	test ah,4
+ 018B  75 0D                 C	 	 	jnz display
+ 018D  FE C4                 C	 	 	inc ah
+ 018F  FE C4                 C	 	 	inc ah
+ 0191  B0 3A                 C	 	 	mov al,3Ah
+ 0193  2E: 88 04             C	 	 	mov cs:[si],al
+ 0196  4E                    C	 	 	dec si
+ 0197  4E                    C	 	 	dec si
+ 0198  EB CF                 C	 	 	jmp next
+ 019A  59                    C	display:	pop cx
+ 019B  5E                    C	 	 	pop si
+ 019C  E8 026C R             C	 	 	call dispint
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-7
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 019F  C3                    C	 	 	ret
+                             C	;
+ 01A0     08 [               C	cli_str: 	dw 8 dup (' ')
+                0F20         C	
+                      ]      C	
+                             C	
+                             C	;
+ 01B0                        C	clockint	endp
+                             C	 	 	include resin.asm
+                             C	;------------ RESIN ---------------------------
+	 	 	 	----------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	----------------
+ 01B0                        C	resin	proc near
+ 01B0  8D 36 01BE R          C	 	 	lea si,res_str
+ 01B4  BF 0000               C	 	 	mov di,0000
+ 01B7  B9 0024               C	 	 	mov cx,36
+ 01BA  E8 026C R             C	 	 	call dispint
+ 01BD  C3                    C	 	 	ret
+                             C	;
+ 01BE  52 0F 65 0F 73 0F     C	res_str:	db 'Reset on DataB
+	 	 	 	oard'
+       65 0F 74 0F 20 0F     C	
+       6F 0F 6E 0F 20 0F     C	
+       44 0F 61 0F 74 0F     C	
+       61 0F 42 0F 6F 0F     C	
+       61 0F 72 0F 64 0F     C	
+                             C	;
+ 01E2                        C	resin	endp
+                             C	 	 	include dbint.asm
+                             C	;------------ DBINT ---------------------------
+	 	 	 	---------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------------
+ 01E2                        C	dbint	proc near
+ 01E2  8D 36 01F8 R          C	 	 	lea si,dbi_str
+ 01E6  BF 0026               C	 	 	mov di,0038
+ 01E9  B9 002C               C	 	 	mov cx,44
+ 01EC  E8 026C R             C	 	 	call dispint
+ 01EF  50                    C	 	 	push ax
+ 01F0  52                    C	 	 	push dx
+ 01F1  BA 0307               C	 	 	mov dx,0307h
+ 01F4  EC                    C	 	 	in al,(dx)
+ 01F5  5A                    C	 	 	pop dx
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-8
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 01F6  58                    C	 	 	pop ax
+ 01F7  C3                    C	 	 	ret
+                             C	;
+ 01F8  49 0F 6E 0F 74 0F     C	dbi_str:	db 'Interrupt on D
+	 	 	 	ataBoard'
+       65 0F 72 0F 72 0F     C	
+       75 0F 70 0F 74 0F     C	
+       20 0F 6F 0F 6E 0F     C	
+       20 0F 44 0F 61 0F     C	
+       74 0F 61 0F 42 0F     C	
+       6F 0F 61 0F 72 0F     C	
+       64 0F                 C	
+                             C	;
+ 0224                        C	dbint	endp
+                             C	 	 	include nolegint.asm
+                             C	;------------ NOLEGINT ------------------------
+	 	 	 	------------------
+                             C	;
+                             C	;  DX=PC4680 base adress
+                             C	;
+                             C	;  CX,DI,SI changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	------------------
+ 0224                        C	nolegint	proc near
+ 0224  8D 36 0232 R          C	 	 	lea si,nli_str
+ 0228  BF 0054               C	 	 	mov di,0084
+ 022B  B9 003A               C	 	 	mov cx,58
+ 022E  E8 026C R             C	 	 	call dispint
+ 0231  C3                    C	 	 	ret
+                             C	;
+ 0232  49 0F 6C 0F 6C 0F     C	nli_str:	db 'Illegal interr
+	 	 	 	upt has occured'
+       65 0F 67 0F 61 0F     C	
+       6C 0F 20 0F 69 0F     C	
+       6E 0F 74 0F 65 0F     C	
+       72 0F 72 0F 75 0F     C	
+       70 0F 74 0F 20 0F     C	
+       68 0F 61 0F 73 0F     C	
+       20 0F 6F 0F 63 0F     C	
+       63 0F 75 0F 72 0F     C	
+       65 0F 64 0F           C	
+                             C	;
+ 026C                        C	nolegint	endp
+                             C	 	 	include dispint.asm
+                             C	;------------ DISPINT -------------------------
+	 	 	 	---------------
+                             C	;
+                             C	;  SI=Startadress of string to display
+                             C	;  DI=Destinationadress for string
+                             C	;  CX=String length
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	---------------
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-9
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 026C                        C	dispint	proc near
+ 026C  06                    C	 	 	push es
+ 026D  52                    C	 	 	push dx
+ 026E  8B 16 02B1 R          C	 	 	mov dx,disptype
+ 0272  8E C2                 C	 	 	mov es,dx
+ 0274  FC                    C	 	 	cld
+ 0275  F3/ A4                C	 	 	rep movsb
+ 0277  5A                    C	 	 	pop dx
+ 0278  07                    C	 	 	pop es
+ 0279  C3                    C	 	 	ret
+ 027A                        C	dispint	endp
+                             C	 	 	include get.asm
+                             C	;---------- L„s data fr†n klockan i PC4680 ----
+	 	 	 	--------------------
+                             C	;
+                             C	;    DX=basadress f”r kortet
+                             C	;    AH=adress i klockan
+                             C	;    CL=data fr†n klockan
+                             C	;
+                             C	;  AX,CX changed
+                             C	;
+                             C	;----------------------------------------------
+	 	 	 	--------------------
+ 027A                        C	get  	 	proc near
+ 027A  52                    C	 	 	push dx
+ 027B  B0 83                 C	     	mov al,83H
+ 027D  83 C2 0F              C	 	 	add dx,0Fh
+ 0280  EE                    C	 	 	out (DX),AL
+ 0281  4A                    C	 	 	dec dx
+ 0282  B0 D0                 C	 	 	mov al,0DH*10H
+ 0284  EE                    C	 	 	out (DX),al
+ 0285  B0 50                 C	 	 	mov al,5*10H
+ 0287  EE                    C	 	 	out (DX),al
+ 0288  B0 70                 C	 	 	mov al,7*10H
+ 028A  EE                    C	 	 	out (DX),al
+ 028B  8A C4                 C	 	 	mov al,ah
+ 028D  4A                    C	 	 	dec dx
+ 028E  4A                    C	 	 	dec dx
+ 028F  EE                    C	 	 	out (DX),al
+ 0290  B0 60                 C	 	 	mov al,6*10H
+ 0292  42                    C	 	 	inc dx
+ 0293  42                    C	 	 	inc dx
+ 0294  EE                    C	 	 	out (DX),al
+ 0295  B0 40                 C	 	 	mov al,4*10H
+ 0297  EE                    C	 	 	out (DX),al
+ 0298  B0 C0                 C	 	 	mov al,0CH*10H
+ 029A  EE                    C	 	 	out (DX),al
+ 029B  B0 93                 C	 	 	mov al,93H
+ 029D  42                    C	 	 	inc dx
+ 029E  EE                    C	 	 	out (DX),al
+ 029F  4A                    C	 	 	dec dx
+ 02A0  4A                    C	 	 	dec dx
+ 02A1  4A                    C	 	 	dec dx
+ 02A2  EC                    C	 	 	in al,(DX)
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	1-10
+	 	 	 	 	 	 	 	05-29-86    
+
+
+ 02A3  8A C8                 C	 	 	mov cl,al
+ 02A5  B0 50                 C	 	 	mov al,5*10H
+ 02A7  42                    C	 	 	inc dx
+ 02A8  42                    C	 	 	inc dx
+ 02A9  EE                    C	 	 	out (DX),al
+ 02AA  B0 D0                 C	 	 	mov al,0DH*10H
+ 02AC  EE                    C	 	 	out (DX),al
+ 02AD  5A                    C	 	 	pop dx
+ 02AE  C3                    C	 	 	ret
+ 02AF                        C	get	 	endp
+ 	 	 	 	;
+ 02AF     01 [	 	 	intmask	dw 1 dup(?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02B1     01 [	 	 	disptype	dw 1 dup (?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02B3     01 [	 	 	last_adr 	dw 1 dup(?)
+                ????	 	
+                      ]	 	
+ 	 	 	 	
+ 	 	 	 	;
+ 02B5	 	 	 	cseg	 	ends
+ 	 	 	 	 	 	end
+
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	Symbols
+	 	 	 	-1
+	 	 	 	 	 	 	 	05-29-86    
+
+
+Segments and Groups:
+
+	 	N a m e	 	 	Size	Align	Combine	Class
+
+CSEG . . . . . . . . . . . . . .	02B5	PARA  	PUBLIC	'CODE'
+STACK. . . . . . . . . . . . . .	0800	PARA  	STACK 	'STACK'
+
+Symbols:            
+
+	 	N a m e	 	 	Type	Value	Attr         
+
+AF . . . . . . . . . . . . . . .	L NEAR 	00FA	CSEG
+ALARM. . . . . . . . . . . . . .	N PROC	010F	CSEG	Length =0030
+ALA_STR. . . . . . . . . . . . .	L NEAR 	0135	CSEG
+BIT_0. . . . . . . . . . . . . .	L NEAR 	00D2	CSEG
+BIT_1. . . . . . . . . . . . . .	L NEAR 	00CD	CSEG
+BIT_2. . . . . . . . . . . . . .	L NEAR 	00C8	CSEG
+BIT_3. . . . . . . . . . . . . .	L NEAR 	00C3	CSEG
+BIT_4. . . . . . . . . . . . . .	L NEAR 	00BE	CSEG
+BIT_5. . . . . . . . . . . . . .	L NEAR 	00B9	CSEG
+BIT_6. . . . . . . . . . . . . .	L NEAR 	00B4	CSEG
+BIT_7. . . . . . . . . . . . . .	L NEAR 	00AF	CSEG
+CLIVEKT. . . . . . . . . . . . .	N PROC	00D7	CSEG	Length =0038
+CLI_STR. . . . . . . . . . . . .	L NEAR 	01A0	CSEG
+CLOCKINT . . . . . . . . . . . .	N PROC	0158	CSEG	Length =0058
+DBINT. . . . . . . . . . . . . .	N PROC	01E2	CSEG	Length =0042
+DBI_STR. . . . . . . . . . . . .	L NEAR 	01F8	CSEG
+DISPINT. . . . . . . . . . . . .	N PROC	026C	CSEG	Length =000E
+DISPLAY. . . . . . . . . . . . .	L NEAR 	019A	CSEG
+DISPTYPE . . . . . . . . . . . .	L WORD 	02B1	CSEG
+EXIT . . . . . . . . . . . . . .	L NEAR 	010C	CSEG
+GET. . . . . . . . . . . . . . .	N PROC	027A	CSEG	Length =0035
+INT. . . . . . . . . . . . . . .	F PROC	0052	CSEG	Length =0030
+INTMASK. . . . . . . . . . . . .	L WORD 	02AF	CSEG
+INTTABLE . . . . . . . . . . . .	N PROC	00AF	CSEG	Length =0028
+INTVEKT. . . . . . . . . . . . .	N PROC	0082	CSEG	Length =002D
+INTXT. . . . . . . . . . . . . .	F PROC	0000	CSEG	Length =0052
+IRQF . . . . . . . . . . . . . .	L NEAR 	00EB	CSEG
+LAST . . . . . . . . . . . . . .	L NEAR 	003E	CSEG
+LAST_ADR . . . . . . . . . . . .	L WORD 	02B3	CSEG
+LOOP . . . . . . . . . . . . . .	L NEAR 	014A	CSEG
+LOOPA. . . . . . . . . . . . . .	L NEAR 	0127	CSEG
+MONODISP . . . . . . . . . . . .	L NEAR 	0038	CSEG
+MORE . . . . . . . . . . . . . .	L NEAR 	0055	CSEG
+NEXT . . . . . . . . . . . . . .	L NEAR 	0169	CSEG
+NEXTINT. . . . . . . . . . . . .	L NEAR 	00A4	CSEG
+NLI_STR. . . . . . . . . . . . .	L NEAR 	0232	CSEG
+NOLEGINT . . . . . . . . . . . .	N PROC	0224	CSEG	Length =0048
+PERIOD . . . . . . . . . . . . .	N PROC	013F	CSEG	Length =0019
+PF . . . . . . . . . . . . . . .	L NEAR 	00F0	CSEG
+RESIN. . . . . . . . . . . . . .	N PROC	01B0	CSEG	Length =0032
+RES_STR. . . . . . . . . . . . .	L NEAR 	01BE	CSEG
+TEST_BIT . . . . . . . . . . . .	L NEAR 	0093	CSEG
+ IBM Personal Computer MACRO Assembler   Version 2.00  	Page	Symbols
+	 	 	 	-2
+	 	 	 	 	 	 	 	05-29-86    
+
+
+UF . . . . . . . . . . . . . . .	L NEAR 	0104	CSEG
+
+48650 Bytes free   
+
+Warning Severe
+Errors	Errors 
+0	0

+ 58 - 0
PC/PC4680/PC4680/LAS4008.BAS

@@ -0,0 +1,58 @@
+10 ' Las4008.bas  P-J H”gfeldt  850124
+20 ' Kap 3.2 sid 42 Ex 2
+30 ' L„ser en ing†ng och visar bin„rt
+40 '
+100 '
+110 ' FUNKTION F™R KONVERTERING AV FLYTTAL TILL HELTAL
+120 '
+130 ' In  Tal! = Ett tal som skall omvandlas, OBS 32768<Tal!<65536
+140 ' Ut  Ett tal i intervallet -32768 - 0
+150 '
+160 DEF FNHELTAL%(TAL)=TAL-65536!
+200 '
+210 ' HUVUDPROGRAMMET
+220 '
+230 Z=INP(&H307)
+240 CLS
+250 PRINT "Optoing†ngarna „r inst„llda enligt f”ljande, sluta med S." : PRINT
+255 PRINT "Port nr   0 1 2 3 4 5 6 7"
+260 '
+270 WHILE I$<>"S"
+280   '
+290   GRUPP1$="" : GRUPP2$=""
+300   FOR PORT%=0 TO 7
+310     OUT &H301,4
+320     GOSUB 700 : GRUPP1$=GRUPP1$+STR$(STATUS%)
+330     '
+340     OUT &H301,&H84
+350     GOSUB 700 : GRUPP2$=GRUPP2$+STR$(STATUS%)
+360   NEXT PORT%
+370   '
+380   PRINT "Grupp 1: " GRUPP1$
+390   PRINT "Grupp 2: " GRUPP2$
+400   INPUT "Mer? (S=Slut) ",I$ : PRINT
+410   '
+420 WEND
+430 END
+700 '
+710 ' SUBRUTIN F™R INLŽSNING AV EN PORT
+720 '
+730 ' In  Port% kan vara 0-7
+740 ' Ut  Status% L„st v„rde antingen 1 (sant) eller 0 (falskt)
+750 '
+760 MASK=2^PORT%
+770 IF MASK>32767 THEN MASK%=FNHELTAL(MASK) ELSE MASK%=MASK 'EV KONVERTERA
+780 STATUS%=(INP(&H300) AND MASK%)/MASK%
+790 RETURN
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL PROGRAMMET
+1020 '
+1030 ' Rad Kommentar
+1040 ' 230 Nollst„llning av all kort.
+1050 ' 270 Loopa tills ett S „r inmatat.
+1060 ' 300 R„kna upp Port% s† att 8 ing†ngar l„ses f”r varje grupp.
+1070 ' 310 V„lj grupp 1 p† kort med adress 4.
+1080 ' 320 L„sen ing†ng och spara det bin„ra v„rdet i Grupp1$.
+1090 ' 340 V„lj grupp 2.
+1100 ' 350 L„s och spara ing†ngen.
+

+ 41 - 0
PC/PC4680/PC4680/LAS4085.BAS

@@ -0,0 +1,41 @@
+10 ' Las4085.bas  P-J H”gfeldt  850212
+20 ' Kap 3.3, Sid 51, Ex 2
+30 ' AVLŽSNING AV 32 ING�NGAR MED 4085
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,8 ' Kortval
+70 '
+80 CLS : PRINT "Programmet visar avl„st inneh†ll i angiven grupp, bin„rt, hexadec och decimalt."
+90 '
+100 WHILE GRUPP%<>9
+110   PRINT
+120   INPUT "Ange grupp du vill l„sa (0-3, 9=Slut)? ",GRUPP%
+130   IF GRUPP%=9 THEN 260
+140   IF GRUPP%>3 OR GRUPP%<0 THEN 110
+150   OUT &H300,GRUPP% ' V„lj grupp
+160   '
+170   IN%=INP(&H300) ' L„s indata
+180   PRINT "Grupp" GRUPP% "bin„rt=" TAB(20);
+190   FOR L%=0 TO 7 ' Presentera bin„rt 8 bitar
+200     PRINT (IN% AND 2^L%)/2^L%;
+210   NEXT L%
+220   '
+230   PRINT : PRINT "Hexadecimalt=" TAB(21) HEX$(IN%)
+240   PRINT "Decimalt=" TAB(20) IN%
+250   '
+260 WEND
+270 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL PROGRAMMET
+1020 '
+1030 ' 50  Nollst„ll korten.
+1040 ' 60  V„lj kort 4085 som h„r har adress 8.
+1050 ' 100 H†ll p† tills inmatad grupp=9.
+1060 ' 120 Mata in ett gruppnr.
+1070 ' 150 V„ljer ut angiven grupp. Bit 0 och 1 anv„ndes.
+1080 ' 170 L„s de †tta ing†ngarna till In%.
+1090 ' 180-210 Presentera bin„rt.
+1100 ' 190 Vill du ha bitarna presenterade i omv„nd ordning skriv "FOR L%=7 TO 0 STEP -1".
+1110 ' 230 Presentera hexadecimalt.
+1120 ' 240 Presentera decimalt.
+

+ 42 - 0
PC/PC4680/PC4680/LASIN.BAS

@@ -0,0 +1,42 @@
+10 ' Lasin.bas  P-J H”gfeldt  850122
+20 ' sid 32 kap 3.1 ex 2
+30 '
+40 ' LŽSNING AV ING�NG P� KORTEN 4005 OCH 4006
+50 ' Testat p† johans tumhjul, endast tiotal
+100 '
+110 ' FUNKTION F™R KONVERTERING AV FLYTTAL TILL HELTAL
+120 '
+130 ' In  Tal! = Ett tal som skall omvandlas, OBS 32768<Tal!<65536
+140 ' Ut  Ett tal i intervallet -32768 - 0
+150 '
+160 DEF FNHELTAL%(TAL)=TAL-65536!
+1000 '
+1010 ' INITIERA
+1020 '
+1030 Z=INP(&H307) ' NOLLSTŽLL KORTEN
+1040 OUT &H301,4 ' KORTVAL 4006 GRUPP 1 Tumhjul tiotal
+1050 '
+1060 ' HUVUDPROGRAMMET
+1070 '
+1080 CLS
+1085 WHILE -1
+1090   INPUT "Vilken ing†ng vill du l„sa (0-3)",PORT%
+1100   IF PORT%<0 OR PORT%>3 THEN 1090
+1105   '
+1110   PRINT :PRINT "P† ing†ngen ligger en "; : COLOR 10
+1120   GOSUB 2000 ' L„s inporten
+1130   IF STATUS%=1 THEN PRINT "etta." ELSE PRINT "nolla."
+1140   COLOR 2 : PRINT
+1150 WEND
+1160 END
+2000 '
+2010 ' SUBRUTIN F™R INLŽSNING AV EN PORT
+2020 '
+2030 ' In  Port% kan vara 0-7
+2040 ' Ut  Status% L„st v„rde antingen 1 (sant) eller 0 (falskt)
+2050 '
+2060 MASK=2^PORT%
+2070 IF MASK>32767 THEN MASK%=FNHELTAL(MASK) ELSE MASK%=MASK 'EV KONVERTERA
+2080 STATUS%=(INP(&H300) AND MASK%)/MASK%
+2090 RETURN
+

+ 29 - 0
PC/PC4680/PC4680/LASTUM.BAS

@@ -0,0 +1,29 @@
+10 ' Lastum.bas  P-J H”gfeldt  850122
+20 ' eget exempel
+30 '
+40 ' Avl„sning av ins„llning p† tumhjul, tiotal och ental
+50 ' Testat p† johans tumhjul
+1000 '
+1010 ' INITIERA
+1020 '
+1030 Z=INP(&H307) ' Nollst„ll korten
+1050 '
+1060 ' HUVUDPROGRAMMET
+1070 '
+1080 CLS
+1082 PRINT "Stanna programmet med ctrl-break"
+1085 WHILE -1
+1087   LOCATE 10,1
+1090   PRINT "Tumhjulet st†r nu inst„llt p†";
+1095   '
+1100   OUT &H301,4 ' V„lj kortet med tumhjul, tiotal
+1110   TIOTAL%=INP(&H300) AND &HF ' L„s av tumhjulet, tiotal
+1120   TIOTAL%=TIOTAL%*10
+1130   '
+1140   OUT &H301,&H84 ' V„lj tumhjul, ental
+1150   ENTAL%=INP(&H300) AND &HF ' L„s ental
+1160   '
+1170   PRINT TIOTAL%+ENTAL%
+1180   '
+1200 WEND
+

+ 51 - 0
PC/PC4680/PC4680/MOT4014.BAS

@@ -0,0 +1,51 @@
+10 ' Mot4014.bas P-J H”gfeldt  850510
+20 ' Styr en stegmotor i taget via kort 4014.
+30 '
+40 Z=INP(&H307)
+50 OUT &H301,1 ' V„lj kort
+60 '
+70 CLS
+80 PRINT "Vilken motor vill du k”ra (0-15)"; ' V„lj motornummer.
+90 INPUT MOT%
+100 IF MOT%<0 OR MOT%>15 THEN 80
+110 IF MOT%<4 THEN GRUPP%=0 ELSE GRUPP%=MOT%\4+1 ' R„kna ut grupptillh”righet
+120 UT%=(MOT%-(MOT%\4)*4)*2 ' Denna motors plats i byten som skickas
+130 '
+140 PRINT "Styr motorn med f”ljande piltangenter: v„nster-moturs, h”ger-medurs,"
+150 PRINT "upp†t-fril„ge, ned†t-stopp. Sluta med escape."
+160 '
+170 WHILE A$<>CHR$(27)
+180  LOCATE 5,1 : A$=INKEY$
+190  IF A$=CHR$(27) THEN PRINT : GOTO 480 ' Slut
+200  IF LEN(A$)<=1 THEN 180 ' V„nta p† piltangent
+210  '
+220  IF RIGHT$(A$,1)<>"K" THEN 280 ' Testa om tryckt tangent ej „r pil v„nster.
+230  '
+240  ' Moturs
+250    OUT &H300+GRUPP%,2^UT%*2 ' Skicka en tv†a till vald motor.
+260    PRINT "Moturs "
+270  GOTO 480
+280  '
+290  IF RIGHT$(A$,1)<>"M" THEN 350 ' Testa om tryckt tangent ej „r pil h”ger.
+300  '
+310  ' Medurs
+320    OUT &H300+GRUPP%,2^UT%*1 ' Skicka en etta till vald motor.
+330    PRINT "Medurs "
+340  GOTO 480
+350  '
+360  IF RIGHT$(A$,1)<>"H" THEN 420
+370  '
+380  ' Fril„ge
+390    OUT &H300+GRUPP%,2^UT%*3 ' Skicka en trea till vald motor.
+400    PRINT "Fril„ge"
+410  GOTO 480
+420  '
+430  IF RIGHT$(A$,1)<>"P" THEN 480
+440  '
+450  ' Stopp
+460    OUT &H300+GRUPP%,2^UT%*0 ' Skicka noll.
+470    PRINT "Stopp  "
+480  '
+490 WEND
+500 END
+

+ 18 - 0
PC/PC4680/PC4680/NOLEGINT.ASM

@@ -0,0 +1,18 @@
+;------------ NOLEGINT ------------------------------------------
+;
+;  DX=PC4680 base adress
+;
+;  CX,DI,SI changed
+;
+;----------------------------------------------------------------
+nolegint	proc near
+		lea si,nli_str
+		mov di,0084
+		mov cx,58
+		call dispint
+		ret
+;
+nli_str:	db 'Illegal interrupt has occured'
+;
+nolegint	endp
+

+ 0 - 0
PC/PC4680/PC4680/PC4680


+ 66 - 0
PC/PC4680/PC4680/PCTIME.BAS

@@ -0,0 +1,66 @@
+10 ' SAVE"PCTIME",A
+20 ' PCTIME  P-J H™GFELDT 850613
+30 ' Programmet l„ser klockan fr†n PC 4680 och l„gger tiden i TIME$ & DATE$.
+40 '
+50 PRINT "Tiden h„mtas nu fr†n PC 4680"
+60 '
+70 ' Testa s† att VRT=1
+80 '
+90 ADRESS=&HD : GOSUB 2000
+100 IF CDATA>127 THEN 150
+110 ' VRT=0 , Str”mmen till klockan har g†tt ned.
+120 PRINT "Klockan inneh†ller inte n†gon giltig tid!"
+130 PRINT "Tryck return s† kommer du till DBTIME ";: INPUT SLASK$
+140 CHAIN "DBTIME"
+150 '
+160 ' L„s av klockan.
+170 '
+172 ADRESS=&HA : GOSUB 2000
+174 WHILE (CDATA AND &H80)=&H80 ' V„nta tills UIP=0
+176   GOSUB 2000
+178 WEND
+179 '
+180 ADRESS=9 : A$="" : MELLAN$="-"
+190 WHILE ADRESS>=0
+200   GOSUB 2000
+210   THIGH=(CDATA AND &HF0)/16
+220   TLOW=CDATA AND &HF
+230   A$=A$+CHR$(THIGH+&H30)+CHR$(TLOW+&H30)+MELLAN$
+240   IF ADRESS<7 THEN ADRESS=ADRESS-2 : MELLAN$=":" ELSE ADRESS=ADRESS-1
+250 WEND
+260 '
+270 PRINT : ON ERROR GOTO 400
+280 TIME$=MID$(A$,13,8)
+290 DATE$=MID$(A$,4,3)+MID$(A$,7,3)+MID$(DATE$,7,2)+LEFT$(A$,2)
+300 PRINT "TIME$=" TIME$ : PRINT "DATE$=" DATE$
+310 END
+400 RESUME 120 ' Fel p† klockan
+1000 '************ Skriv data till klockan ***********************************
+1010 OUT &H30F,&H83
+1020 OUT &H30E,9*16
+1030 OUT &H30E,1*16
+1040 OUT &H30E,3*16
+1050 OUT &H30C,ADRESS
+1060 OUT &H30E,2*16
+1070 OUT &H30E,0*16
+1080 OUT &H30E,8*16
+1090 OUT &H30C,CDATA
+1100 OUT &H30E,1*16
+1110 OUT &H30E,9*16
+1120 OUT &H30F,&H93
+1130 RETURN
+2000 '************ L„s data fr†n klockan *************************************
+2010 OUT &H30F,&H83
+2020 OUT &H30E,&HD*16
+2030 OUT &H30E,5*16
+2040 OUT &H30E,7*16
+2050 OUT &H30C,ADRESS
+2060 OUT &H30E,6*16
+2070 OUT &H30E,4*16
+2080 OUT &H30E,&HC*16
+2090 OUT &H30F,&H93
+2100 CDATA=INP(&H30C)
+2110 OUT &H30E,5*16
+2120 OUT &H30E,&HD*16
+2130 RETURN
+

BIN
PC/PC4680/PC4680/PCTIME.EXE


+ 28 - 0
PC/PC4680/PC4680/PERIOD.ASM

@@ -0,0 +1,28 @@
+;---------- PERIOD --------------------------------------
+;
+;  Interrupt routine for periodic interrupt from clock
+;
+;  No registers changed
+;
+;--------------------------------------------------------
+;
+period	proc near
+		push ax
+		in al,61h
+		or al,03h
+		out 61h,al
+		push ax
+		mov ax,0010h
+loop:	push ax
+		pop ax
+		push ax
+		pop ax
+		dec ax
+		jnz loop
+		pop ax
+ 		and al,0FCh
+		out 61h,al
+		pop ax
+		ret
+period	endp
+

+ 18 - 0
PC/PC4680/PC4680/RESIN.ASM

@@ -0,0 +1,18 @@
+;------------ RESIN -------------------------------------------
+;
+;  DX=PC4680 base adress
+;
+;  CX,DI,SI changed
+;
+;--------------------------------------------------------------
+resin	proc near
+		lea si,res_str
+		mov di,0000
+		mov cx,36
+		call dispint
+		ret
+;
+res_str:	db 'Reset on DataBoard'
+;
+resin	endp
+

+ 47 - 0
PC/PC4680/PC4680/RINN4006.BAS

@@ -0,0 +1,47 @@
+10 ' Rinn4006.bas  /Datum  P-J H”gfeldt  850118
+15 ' Rinnande lysdioder p† kortet 4006
+17 ' hastigheten best„ms av inst„llningen p† tumhjulen.
+20 '
+30 DEF FNHELTAL(TAL)=TAL-65536!
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+70 '
+80 ' Programloopen
+90 '
+93  WHILE -1
+100  ' L„s av tumhjulsinst„llning
+101  OUT &H301,4 : A1%=INP(&H300) AND &HF ' L„s tiotal fr†n tumhjul
+102  OUT &H301,&H84 : A1%=((INP(&H300) AND &HF) + (A1%*10))*10 ' Ental+tiotal
+103  OUT &H301,4
+105  OUT &H303,&HFD
+107  ' Grupp 1 p† v„g upp
+110  FOR I=0 TO 7
+120    IF 2^I >32767 THEN UT%=FNHELTAL(2^I) ELSE UT%=2^I
+130    OUT &H300,UT% XOR &HFF ' T„nd en port
+135    FOR V=1 TO A1% : NEXT V ' V„nta enligt tumhjulet
+140  NEXT I
+145  OUT &H300,255
+147  ' Grupp 2 p† v„g upp
+150  FOR I=0 TO 6
+160    IF 2^I >32767 THEN UT%=FNHELTAL(2^I) ELSE UT%=2^I
+170    OUT &H302,UT% XOR &HFF
+180    FOR V=1 TO A1% : NEXT V
+190  NEXT I
+200  OUT &H302,255 ' Sl„ck grupp 2
+305  OUT &H303,&HFE
+307  ' Grupp 2 p† v„g ner
+310  FOR I=6 TO 0 STEP -1
+320    IF 2^I >32767 THEN UT%=FNHELTAL(2^I) ELSE UT%=2^I
+330    OUT &H302,UT% XOR &HFF
+335    FOR V=1 TO A1% : NEXT V
+340  NEXT I
+345  OUT &H302,255 ' Sl„ck grupp 2
+347 ' Grupp 1 p† v„g ner
+350  FOR I=7 TO 0 STEP -1
+360    IF 2^I >32767 THEN UT%=FNHELTAL(2^I) ELSE UT%=2^I
+370    OUT &H300,UT% XOR &HFF
+380    FOR V=1 TO A1% : NEXT V
+390  NEXT I
+400  OUT &H300,255  ' Sl„ck grupp 1
+410 WEND
+

+ 31 - 0
PC/PC4680/PC4680/RINN4013.BAS

@@ -0,0 +1,31 @@
+10 ' Rinn4013.bas  P-J H”gfeldt  850502
+20 ' Rinnande ljus p† I/O-kort 4013
+30 '
+40 Z=INP(&H307) ' Nollst„ll
+50 OUT &H301,4 ' Kortval
+60 OUT &H305,1 ' Klart f”r output grupp B
+70 CLS : PRINT "Bryt programmet med ctrl-break!"
+80 '
+90 WHILE -1
+100   OUT &H302,&H81 XOR &HFF ' T„nder ”verst och underst
+110   FOR J=1 TO 100 : NEXT J
+120   FOR I=1 TO 7
+130     OUT &H302,2^I+2^(I-1) XOR &HFF ' T„nder tv† i rad
+140     FOR J=1 TO 100 : NEXT J
+150   NEXT I
+160 WEND
+170 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 40    Nollst„ller alla I/O-kort.
+1050 ' 50    V„ljer kort 4013 som h„r har adress 4.
+1060 ' 60    S„tter bit 0 i kommandoregistret till 1 f”r att kunna l„sa grupp B.
+1070 ' 90    Ger en o„ndlig loop, avbryt med ctrl-break.
+1080 ' 100   T„nder ”versta och nedersta dioden. &H81 g”r att bit 0 och 7 ett-  st„lls, XOR &HFF g”r sedan s† att alla 8 bitar byter v„rde. Resultatet blir att lysdiod 0 och 7 t„nds.
+1090 ' 110   V„nteloop.
+1100 ' 120   Vandra sju steg upp†t.
+1110 ' 130   T„nder 2 dioder i taget. 2^I+2^(I-1) g”r att tv† bitar blir ett-   st„llda. XOR &HFF byter sedan v„rde p† alla bitar.
+1120 ' 140   V„nteloop.
+

+ 28 - 0
PC/PC4680/PC4680/RINN4095.BAS

@@ -0,0 +1,28 @@
+10 ' Rinn4095.bas  P-J H”gfeldt  850124
+20 ' Kap 3.2 sid 41 ex 1
+30 ' Rinnande ljus p† kort 4095
+40 '
+50 Z=INP(&H307)
+60 OUT &H301,4
+70 '
+80 WHILE -1
+90   OUT &H300,&H81
+100   FOR J=1 TO 100 : NEXT J
+110   FOR I=1 TO 7
+120     OUT &H300,2^I+2^(I-1)
+130     FOR J=1 TO 100 : NEXT J
+140   NEXT I
+150 WEND
+160 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 50    Nollst„ller alla I/O-kort
+1050 ' 60    V„ljer kort 4095 som har adress 4
+1060 ' 80    Ger en o„ndlig loop, avbryt med ctrl-break
+1070 ' 90    T„nder ”versta och nedersta dioden
+1080 ' 100   V„nteloop
+1090 ' 110   T„nder 2 dioder i taget
+1100 ' 120   V„nteloop
+

+ 28 - 0
PC/PC4680/PC4680/RINN4103.BAS

@@ -0,0 +1,28 @@
+10 ' Rinn4103.bas  P-J H”gfeldt  850208
+20 ' Kap 3.4 sid 61 ex 1
+30 ' Rinnande ljus p† rel„kort 4103
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,4 ' Kortval
+70 '
+80 WHILE -1
+90   OUT &H300,&H81 ' T„nder ”verst och underst
+100   FOR J=1 TO 100 : NEXT J
+110   FOR I=1 TO 7
+120     OUT &H300,2^I+2^(I-1) ' T„nder tv† i rad
+130     FOR J=1 TO 100 : NEXT J
+140   NEXT I
+150 WEND
+160 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 50    Nollst„ller alla I/O-kort
+1050 ' 60    V„ljer kort 4103 som h„r har adress 4
+1060 ' 80    Ger en o„ndlig loop, avbryt med ctrl-break
+1070 ' 90    T„nder ”versta och nedersta dioden
+1080 ' 100   V„nteloop
+1090 ' 110   T„nder 2 dioder i taget
+1100 ' 120   V„nteloop
+

+ 14 - 0
PC/PC4680/PC4680/SET.ASM

@@ -0,0 +1,14 @@
+;--------- Skriv data till klockan -------------------
+;
+;
+;
+;-----------------------------------------------------
+;
+set		proc near
+		mov al,ah
+		out 70h,al
+		mov al,cl
+		out 71h,al
+		ret
+set		endp
+

+ 51 - 0
PC/PC4680/PC4680/SET1.ASM

@@ -0,0 +1,51 @@
+;---------- Skriv data till klockan i PC4680 ----------------------
+;
+;    DX=basadress f”r kortet
+;    AH=adress i klockan
+;    CL=data till klockan
+;
+;------------------------------------------------------------------
+;
+set		proc near
+		push dx
+      	mov AL,83H
+		add dx,0Fh
+		out (DX),AL
+		dec dx
+		mov AL,1*10H
+		out (DX),AL
+		mov AL,13*10H
+		out (DX),AL
+		mov AL,15*10H
+		out (DX),AL
+		mov AL,AH
+		dec dx
+		dec dx
+		out (DX),AL
+		mov AL,14*10H
+		inc dx
+		inc dx
+		out (DX),AL
+		mov AL,12*10H
+		out (DX),AL
+		mov AL,8*10H
+		out (DX),AL
+		mov AL,CL
+		dec dx
+		dec dx
+		out (DX),AL
+		mov AL,12*10H
+		inc dx
+		inc dx
+		out (DX),AL
+		mov AL,13*10H
+		out (DX),AL
+		mov AL,1*10H
+		out (DX),AL
+		mov AL,93H
+		inc dx
+		out (DX),AL
+		pop dx
+		ret
+set		endp
+

+ 51 - 0
PC/PC4680/PC4680/SET2.ASM

@@ -0,0 +1,51 @@
+;---------- Skriv data till klockan i PC4680 ----------------------
+;
+;    DX=basadress f”r kortet
+;    AH=adress i klockan
+;    CL=data till klockan
+;
+;------------------------------------------------------------------
+;
+set		proc near
+		push dx
+      	mov AL,83H
+		add dx,0Fh
+		out (DX),AL
+		dec dx
+		mov AL,1*10H
+		out (DX),AL
+		dec dx
+		dec dx
+		mov al,ah
+		out (dx),al
+		inc dx
+		inc dx
+		mov al,50h
+		out (dx),al
+		mov al,70h
+		out (dx),al
+		mov al,60h
+		out (dx),al
+		mov al,40h
+		out (dx),al
+		dec dx
+		dec dx
+		mov al,cl
+		out (dx),al
+		inc dx
+		inc dx
+		mov al,0C0h
+		out (dx),al
+		mov al,80h
+		out (dx),al
+		mov al,90h
+		out (dx),al
+		mov al,10h
+		out (dx),al
+		inc dx
+		mov al,93h
+		out (dx),al
+		pop dx
+		ret
+set		endp
+

+ 11 - 0
PC/PC4680/PC4680/SETKEY.BAS

@@ -0,0 +1,11 @@
+10 KEY 1,"OUT &H"
+20 KEY 2,"INP (&H"
+30 KEY 3,"&H"
+40 KEY 4,""
+50 KEY 5,"LOAD"+CHR$(34)
+60 KEY 6,"SAVE"+CHR$(34)
+70 KEY 7,""
+80 KEY 8,""
+90 KEY 9,""
+100 KEY 10,"?INP(&H307)"+CHR$(13)
+

+ 38 - 0
PC/PC4680/PC4680/SIN4083.BAS

@@ -0,0 +1,38 @@
+10 ' Sin4083.bas  P-J H”gfeldt  850212
+20 ' Kap 4.1  sid 72 ex 6
+30 ' Variera sp„nningen enligt sinuskurva p† D/A-kortet 4083
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,9 ' Kortval
+70 CLS : PRINT "Nu genereras en sinussp„nning, bryt med ctrl-break."
+80 PI=3.141593 ' Konstanten pi
+90 '
+100 WHILE -1 ' O„ndlig loop
+110   FOR I=0 TO 2*PI STEP 2*PI/50
+120     '
+130     UT%=(.5+SIN(I)/2)*4095 ' Omr„kning
+140     '
+150     OUT &H300,UT% AND &HFF ' L„gsta 8 bitar till kanal 1.
+160     OUT &H302,UT%\&H100 ' H”gsta 4 bitar till kanal 1.
+170     '
+180   NEXT I
+190 WEND
+200 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 50    Nollst„ller alla I/O-kort.
+1050 ' 60    V„ljer kort 4083 som har adress 9.
+1060 ' 80    Definiera Pi.
+1070 ' 100   Ger en o„ndlig loop, avbryt med ctrl-break.
+1080 ' 110   R„kna upp I till 2*Pi (ett varv runt), med stegl„ngden 2*Pi/50.
+1090 ' 130   Formel som generar en sinussignal. Vi beh”ver ej omvandla till
+1100 '       heltal, eftersom resultatet blir <= 4095 (&H0FFF).
+1110 ' 150   Maskar de 8 l„gsta bitarna och skickar dem p† kanal 1.
+1120 '       ™nskas kanal 2 skriver du OUT &H302,
+1130 ' 160   Heltalsdivision med &H100 ger de 8 h”gsta bitarna som resultat,
+1140 '       varav de 4 h”gsta alltid „r nollst„llda fr†n formeln (rad 130).
+1150 '       Detta tal skickar vi till kanal 1.
+1160 '       ™nskas kanal 2 skriver du OUT &H303,
+

+ 112 - 0
PC/PC4680/PC4680/STEP4066.BAS

@@ -0,0 +1,112 @@
+10 ' STEP4066  P-J H™GFELDT  850513
+20 ' STYR EN STEGMOTOR I X- OCH Y-LED MED HASTIGHET, STRŽCKA OCH RIKTNING.
+25 ' KORT 4066
+30 '
+40 Z=INP(&H307) ' Nollst„ll
+50 '
+60 XKORT%=0 : YKORT%=1 ' Kortadresser
+70 '
+80 OUT &H301,XKORT%
+90  OUT &H302,0 ' Reset
+100 FOR I%=0 TO 200 : NEXT I%
+110 OUT &H302,3 ' Upph„v reset
+120 '
+130 OUT &H301,YKORT%
+140 OUT &H302,0 ' Reset
+150 FOR I%=0 TO 200 : NEXT I%
+160 OUT &H302,3 ' Upph„v reset
+170 '
+182 CTRLBREAK=0
+184 WHILE NOT CTRLBREAK ' Snurra till programmet bryts
+186   '
+190   ' Mata in v„rden f”r x-motorn.
+195   CLS
+200   LOCATE 1,1 : PRINT "X-MOTOR"
+210   LOCATE 4,1 : INPUT "Hastighet 100-240 ",XHAST$
+220   INPUT "Str„cka 1-64000   ",XSTRACKA$
+230   INPUT "Riktning: V/H     ",XRIKTNING$
+240   '
+250   ' Mata in v„rden f”r y-motorn.
+260   LOCATE 1,30 : PRINT "Y-MOTOR"
+270   LOCATE 4,30 : INPUT "Hastighet 100-240 ",YHAST$
+280   LOCATE 5,30 : INPUT "Str„cka 1-64000   ",YSTRACKA$
+290   LOCATE 6,30 : INPUT "Riktning: V/H     ",YRIKTNING$
+300   '
+310   ' =============
+320   '   X-MOTORN
+330   ' =============
+340   OUT &H301,XKORT% ' V„lj kortadr. f”r X
+345   '
+350   KOMMANDO$="S 10" : GOSUB 1000 ' Accelerationsramp.
+360   KOMMANDO$="R "+XHAST$ : GOSUB 1000 ' Max hastighet.
+370   KOMMANDO$="N "+XSTRACKA$ : GOSUB 1000 ' Antal steg.
+380   '
+390   IF XRIKTNING$="V" OR XRIKTNING$="v" THEN KOMMANDO$="-" ELSE KOMMANDO$="+"
+400   GOSUB 1000 ' Skicka riktning
+405   '
+410   KOMMANDO$="C" : GOSUB 1000 ' Full drivstr”m till motorn.
+420   KOMMANDO$="G" : GOSUB 1000 ' S„tt ig†ng.
+430   '
+440   GOSUB 1300 ' V„nta tills r”relsen „r klar.
+450   '
+460   KOMMANDO$="B" : GOSUB 1000 ' Ej full motorstr”m.
+470   '
+480   LOCATE 12,1 : PRINT "X-MOTOR KLAR"
+490   '
+500   ' =============
+510   '   Y-MOTORN
+520   ' =============
+530   OUT &H301,YKORT% ' V„lj kortadr. f”r Y
+540   '
+550   KOMMANDO$="S 10" : GOSUB 1000 ' Accelerationsramp.
+560   KOMMANDO$="R "+YHAST$ : GOSUB 1000 ' Max hastigheten.
+570   KOMMANDO$="N "+YSTRACKA$ : GOSUB 1000 ' Antal steg.
+580   '
+590   IF YRIKTNING$="V" OR YRIKTNING$="v" THEN KOMMANDO$="-" ELSE KOMMANDO$="+"
+600   GOSUB 1000 ' Skicka riktning v„nster eller h”ger.
+605   '
+610   KOMMANDO$="C" : GOSUB 1000 ' Full drivstr”m till motorn.
+620   KOMMANDO$="G" : GOSUB 1000 ' S„tt ig†ng.
+630   '
+640   GOSUB 1300 ' V„nta tills r”relsen „r klar.
+650   '
+660   KOMMANDO$="B" : GOSUB 1000 ' Ej full motorstr”m.
+670   '
+680   LOCATE 12,30 : PRINT "Y-MOTOR KLAR"
+690   '
+692   INPUT "Tryck return ",X$
+694   '
+700 WEND
+710 END
+1000 '
+1010 ' =========================================================
+1020 ' Subrutin f”r att skicka en kommandostr„ng till kort 4066.
+1030 '
+1040 ' In Kommando$ inneh†ller de tecken som skall skickas.
+1050 '
+1060 FOR I%=1 TO LEN(KOMMANDO$)
+1070   TECKEN$=MID$(KOMMANDO$,I%,1)
+1080   '
+1090   ' V„nta p† Ready-signal, programmet bryts efter timeout.
+1100   TID%=1000
+1110   WHILE TID%
+1120     IF (INP(&H300) AND 1)=0 THEN 1170 ' Kolla Ready-signal.
+1130     TID%=TID%-1
+1140   WEND
+1150   PRINT "Ingen Ready-signal!":STOP
+1160   '
+1170   ' Ok
+1180   '
+1190   OUT &H300,ASC(TECKEN$) ' Skicka kommandotecken.
+1200 NEXT I%
+1210 '
+1220 OUT &H300,13 ' Kommandot avslutas med Carriage Return.
+1230 RETURN
+1300 '
+1310 ' ===========================================
+1320 ' Subrutin som v„ntar tills r”relsen „r klar.
+1330 '
+1340 WHILE INP(&H300) AND 2 ' Kolla bit 1 i statusbyten.
+1350 WEND
+1360 RETURN
+

+ 34 - 0
PC/PC4680/PC4680/STYR4085.BAS

@@ -0,0 +1,34 @@
+10 ' Styr4085.bas  P-J H”gfeldt  850212
+20 ' Kap 3.3 Sid 50 Ex 1
+30 ' STYR TV� UTSIGNALER P� 4085
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,8 ' Kortval
+70 '
+80 CLS
+90 PRINT "Detta program kan st„lla om tv† utsignaler, A och B.":PRINT
+100 WHILE -1
+110   PRINT "A st†r nu som" A%
+120   PRINT "B st†r nu som" B% : PRINT
+130   '
+140   INPUT "S„tt A till? (1/0) ",A%
+150   IF A%<0 OR A%>1 THEN 140
+160   '
+170   INPUT "S„tt B till? (1/0) ",B%
+180   IF B%<0 OR B%>1 THEN 170
+190   '
+200   OUT &H300,4*A%+8*B% ' St„ll bit 2 och 3, ”vriga bitar alltid=0.
+210 WEND
+220 END
+1000 '
+1010 ' H„r f”ljer kommentarer till programmet.
+1020 '
+1030 ' Rad Kommentar
+1040 ' 50  Nollst„ll korten.
+1050 ' 60  V„lj kort 4085 som h„r har adress 8.
+1060 ' 100 O„ndlig loop b”rjar.
+1070 ' 110-120 Skriv ut hur portarna st†r nu.
+1080 ' 140 Mata in nytt l„ge f”r port A.
+1090 ' 170 Mata in nytt l„ge f”r port B.
+1100 ' 200 S„tt bit 2 och 3 till inmatat v„rde och styr portarna.
+

+ 52 - 0
PC/PC4680/PC4680/STYRUT.BAS

@@ -0,0 +1,52 @@
+10 ' Styrut.bas  P-J H”gfeldt  850110
+20 ' Kap 3.1 sid 31
+30 ' Styrning av utsignalerna p† kort 4005 och 4006
+40 ' Styrningen sker indivinduellt. En utg†ng p†verkas per g†ng
+50 '
+60 Z=INP(&H307) ' Nollst„ller alla I/O-korten
+70 OUT &H301,4 ' Kortval, 4005=3 och 4006=4
+75 WHILE BIT%<2 ' Sluta med en tv†a
+80   CLS
+90   PRINT "Ange grupp";:INPUT GRUPP%
+100  IF GRUPP%<1 OR GRUPP%>4 THEN 90
+110  IF GRUPP%=1 THEN GRUPP%=0
+120  '
+130  PRINT "Ange utg†ng i gruppen (0-7)";:INPUT PORT%
+140  IF PORT%<0 OR PORT%>7 THEN 130
+150  '
+160  PRINT "Ange etta eller nolla p† porten (0-1, 2=slut)";:INPUT BIT%
+170  IF BIT%<0 OR BIT%>2 THEN 160
+180  '
+190  IF BIT%=0 THEN GOSUB 1000 ' Nollst„ll porten
+200  IF BIT%=1 THEN GOSUB 1100 ' Ettst„ll porten
+210  OUT &H300+GRUPP%,UT%
+220  SIST%=UT% ' Spara sist skickat
+230 WEND
+300 END
+1000 '
+1010 ' SUBRUTIN F™R NOLLSTŽLLNING AV EN PORT
+1020 '
+1030 ' In  Port% = Vilken port, Sist% = Vad som sist skickades
+1040 ' Ut  Ut% = Vad som skall skickas nu
+1050 '
+1060 TAL=65535!-2^PORT%: GOSUB 1200  : MASK%=TAL
+1070 UT%=SIST% AND MASK%
+1080 RETURN
+1100 '
+1110 ' SUBRUTIN F™R ETTSTŽLLNING AV EN PORT
+1120 '
+1130 ' In  Port% = Vilken port, Sist% = Vad som skickades sist
+1140 ' Ut  Ut% = Vad som skall skickas nu
+1150 '
+1160 TAL=2^PORT% : GOSUB 1200 : MASK%=TAL
+1170 UT%=SIST% OR MASK%
+1180 RETURN
+1200 '
+1210 ' SUBRUTIN FLYTTAL-->HELTAL
+1220 '
+1230 ' In  Tal! = Det tal som skall omvandlas
+1240 ' Ut  Tal! = Ett tal i intervallet -32768 - 32767
+1250 IF TAL>-32769! AND TAL<32768! THEN 1270
+1260 TAL=TAL-65536!
+1270 RETURN
+

+ 65 - 0
PC/PC4680/PC4680/SWIR4013.BAS

@@ -0,0 +1,65 @@
+10 ' Swir4013.bas  P-J H”gfeldt  850502
+20 '
+30 ' L„ser byglingarna grupp C och D p† I/O-kort 4013 och presenterar bin„rt.
+40 '
+100 '
+110 ' FUNKTION F™R KONVERTERING AV FLYTTAL TILL HELTAL
+120 '
+130 ' In  Tal! = Ett tal som skall omvandlas, OBS 32768<Tal!<65536
+140 ' Ut  Ett tal i intervallet -32768 - 0
+150 '
+160 DEF FNHELTAL%(TAL)=TAL-65536!
+200 '
+210 ' HUVUDPROGRAMMET
+220 '
+230 Z=INP(&H307)
+240 OUT &H301,4 ' Kortadress
+250 CLS
+260 PRINT "Byglingarna „r inst„llda enligt f”ljande, sluta med S." : PRINT
+270 PRINT "Switch    1 2 3 4 5 6 7 8"
+280 '
+290 WHILE I$<>"S"
+300   '
+310   GRUPPC$="" : GRUPPD$=""
+320   FOR PORT%=0 TO 7
+330     GRUPP%=0 ' Ger inl„sning av grupp C
+340     GOSUB 700 : GRUPPC$=GRUPPC$+STR$(STATUS% XOR 1)
+350     '
+360     GRUPP%=1 ' Ger inl„sning av grupp D
+370     GOSUB 700 : GRUPPD$=GRUPPD$+STR$(STATUS% XOR 1)
+380   NEXT PORT%
+390   '
+400   PRINT "Grupp C: " GRUPPC$
+410   PRINT "Grupp D: " GRUPPD$
+420   INPUT "Mer? (S=Slut) ",I$ : PRINT
+430   '
+440 WEND
+450 END
+700 '
+710 ' SUBRUTIN F™R INLŽSNING AV EN PORT
+720 '
+730 ' In  Port% kan vara 0-7, Grupp% 0 eller 1
+740 ' Ut  Status% L„st v„rde antingen 1 (sant) eller 0 (falskt)
+750 '
+760 MASK=2^PORT%
+770 IF MASK>32767 THEN MASK%=FNHELTAL(MASK) ELSE MASK%=MASK 'EV KONVERTERA
+780 STATUS%=(INP(&H300+GRUPP%) AND MASK%)/MASK%
+790 RETURN
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL PROGRAMMET
+1020 '
+1030 ' Rad Kommentar
+1040 ' 230 Nollst„llning av alla kort.
+1050 ' 240 V„lj kort 4013 som h„r har adress 4.
+1060 ' 290 Loopa tills ett S „r inmatat.
+1070 ' 320 R„kna upp Port% s† att 8 ing†ngar l„ses.
+1080 ' 330 En nolla h„r v„ljer att grupp C skall l„sas i subrutinen.
+1090 ' 340 L„s en ing†ng och spara det bin„ra v„rdet i GruppC$.
+1095 '     XOR 1% byter v„rde p† Status% fr†n 1 till 0 eller fr†n 0 till 1.
+1097 '     Detta g”rs f”r att l„ge on skall motsvara en etta och off en nolla.
+1100 ' 360 En etta h„r v„ljer att grupp D skall l„sas i subrutinen.
+1110 ' 370 L„s en ing†ng och spara det bin„ra v„rdet i GruppD$.
+1120 ' 400 Skriv ut resultatet som finns sparat i GruppC resp GruppD$.
+1130 ' 320 Vill du ha bitarna presenterade i motsatt ordning s† skriv:
+1140 ' 320   FOR PORT%=7 TO 0 STEP -1
+

+ 44 - 0
PC/PC4680/PC4680/TEXT4117.BAS

@@ -0,0 +1,44 @@
+10 ' Text4117  P-J H™GFELDT  850513
+20 ' Skickar text via 4117 till IBM's seriekort och tillbaka.
+30 ' F”ljande byglingar „r p†: J2,J7,A5-B5,C5-D5. Resten „r ej byglade.
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,1 ' Kortval
+70 OUT &H303,128 ' Aktiverar DTR
+80 '
+90 OPEN "com1:1200,N,8,2,RS,CS10000,DS0,CD0" AS #2 ' ”ppna seriefilen.
+100 '
+110 CLS
+120 WHILE MOTTAG$<>"SLUT" ' Sluta med SLUT
+130   '
+140   MOTTAG$=""
+150   INPUT "Text som skall skickas? ",TEXT$
+160   PRINT "Mottagen text:          ";
+170   '
+180   FOR I%=1 TO LEN(TEXT$) ' G† igenom str„ngen tecken f”r tecken.
+190     '
+200     ' L„s status-byten.
+210     IF (INP(&H301) AND 2)<>0 THEN 210 ' V„nta tills D1 blir 0.
+220     IF (INP(&H301) AND 8)<>0 THEN 220 'Kolla CTS "handskaket",D3 ska bli 0
+230     OUT &H300,ASC(MID$(TEXT$,I%,1)) ' Skicka ett tecken fr†n 4117.
+240     '
+250     ' Ta emot tecknet p† seriekortet.
+260     MELLAN$=INPUT$(1,#2) ' L„s ett tecken.
+270     '
+280     ' Skicka tillbaka tecknet till 4117.
+290     PRINT #2,MELLAN$; ' Endast ett tecken skickas.
+300     '
+310     ' Ta emot texten igen p† kort 4117.
+320     ' L„s status-byte.
+330     IF (INP(&H301) AND 128)<>0 THEN 330 ' V„nta till status D7=0.
+340     OUT &H303,0 ' DTR l†g, s† att inget mer tecken hinner komma.
+350     I$=CHR$(INP(&H300)) ' L„s tecken.
+360     OUT &H303,128 ' DTR h”g, nu kan n„sta tecken f† komma.
+365     '
+370     MOTTAG$=MOTTAG$+I$
+380     PRINT I$;
+390   NEXT I%
+400   PRINT
+410 WEND
+420 END
+

+ 49 - 0
PC/PC4680/PC4680/VOLT4083.BAS

@@ -0,0 +1,49 @@
+10 ' Volt4083.bas  P-J H”gfeldt  850212
+20 ' Kap 4.1 sid 69 ex 2
+30 ' Styr sp„nningen p† vald kanal p† D/A-kortet 4083
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,9 ' Kortval
+70 CLS
+80 '
+90 WHILE VALDKANAL%<>9 ' Sluta med en 9
+100   '
+110   PRINT "V„lj kanal 1-2, 9=slut";:INPUT VALDKANAL%
+120   IF VALDKANAL%=9 THEN GOTO 300
+130   IF VALDKANAL%<1 OR VALDKANAL%>2 THEN GOTO 110
+140   '
+150   PRINT "V„lj antal Volt 0-10";:INPUT VOLT
+160   IF VOLT<0 OR VOLT>10 THEN GOTO 150
+170   '
+180   UT%=4095/10*VOLT ' Omr„kning
+190   '
+200   IF VALDKANAL%=2 THEN 260
+210   ' Kanal 1
+220   OUT &H300,UT% AND &HFF ' L„gsta 8 bitar
+230   OUT &H302,UT%\&H100 ' H”gsta 4 bitar
+240   GOTO 290
+250   '
+260   ' Kanal 2
+270   OUT &H303,UT% AND &HFF ' L„gsta 8 bitar
+280   OUT &H304,UT%\&H100 ' H”gsta 4 bitar
+290   PRINT
+300 WEND
+310 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 50    Nollst„ller alla I/O-kort.
+1050 ' 60    V„ljer kort 4083 som har adress 9.
+1060 ' 90    Loopar tills du v„ljer kanal 9.
+1070 ' 110   V„lj kanal.
+1080 ' 150   V„lj antal volt.
+1090 ' 180   Formel som r„knar om avgivet antal volt till utdata.
+1100 '       Vi beh”ver ej omvandla till heltal eftersom resultatet alltid blir
+1110 '       l„gre „n eller lika med 4095 (&H0FFF).
+1120 ' 200   Kanalval 1 forts„tter, kanal 2 hoppar.
+1130 ' 220   Maskar de 8 l„gsta bitarna och skickar dem p† kanal 1.
+1140 ' 230   Heltalsdivision med &H100 ger de 8 h”gsta bitarna till resultat,
+1150 '       varav de fyra h”gsta alltid „r nollst„llda fr†n formeln (rad 180).
+1160 ' 270-280 Skicka data till kanal 2, se ovan.
+

+ 40 - 0
PC/PC4680/PC4680/VOLT4084.BAS

@@ -0,0 +1,40 @@
+10 ' Volt4084.bas  P-J H”gfeldt  850212
+20 ' Kap 4.1 sid 74 ex 8
+30 ' Styr sp„nningen p† vald kanal med D/A-kortet 4084
+40 '
+50 Z=INP(&H307) ' Nollst„ll
+60 OUT &H301,10 ' Kortval
+70 CLS
+80 '
+90 WHILE VALDKANAL%<>9 ' Sluta med en 9
+100   '
+110   PRINT "V„lj kanal 1-4, 9=slut";:INPUT VALDKANAL%
+120   IF VALDKANAL%=9 THEN GOTO 230
+130   IF VALDKANAL%<1 OR VALDKANAL%>4 THEN GOTO 110
+140   IF VALDKANAL%=1 THEN VALDKANAL%=0 ' Se rad 210
+150   '
+160   PRINT "V„lj antal Volt 0-20";:INPUT VOLT
+170   IF VOLT<0 OR VOLT>20 THEN GOTO 160
+180   '
+190   UT%=255/10*VOLT/2 ' Omr„kning
+200   '
+210   OUT &H300+VALDKANAL%,UT% ' Skicka de †tta bitarna till vald kanal.
+220   '
+230   PRINT
+240 WEND
+250 END
+1000 '
+1010 ' HŽR F™LJER KOMMENTARER TILL OVANST�ENDE PROGRAM
+1020 '
+1030 ' Radnr Kommentar
+1040 ' 50    Nollst„ller alla I/O-kort.
+1050 ' 60    V„ljer kort 4084 som h„r har adress 10.
+1060 ' 90    Loopar tills du v„ljer kanal 9.
+1070 ' 110   V„lj kanal.
+1080 ' 140   F”r att p† rad 210 kunna skriva OUT &H300+VALDKANAL%.
+1090 ' 160   V„lj antal Volt.
+1100 ' 190   Formel som r„knar om avgivet antal Volt till utdata.
+1110 '       Vi beh”ver ej omvandla till heltal eftersom resultatet alltid blir
+1120 '       l„gre „n eller lika med 255 (&HFF).
+1130 ' 210   Skickar talet (0 till 255) p† vald kanal.
+

+ 47 - 0
PC/PC4680/PC4680/VOLT4115.BAS

@@ -0,0 +1,47 @@
+10 ' Volt4115.bas  P-J H”gfeldt  850508
+20 ' L„s av sp„nningen p† A/D-kort 4115 med 32 kanaler.
+30 '
+40 Z=INP(&H307) ' Nollst„ll
+50 CLS
+60 '
+70 ' Kortadresser
+80 LOCATE 20,10 : PRINT "Kortadress"
+90 LOCATE 14,30 : PRINT "Max 10 adresser" : LOCATE 13,30 : PRINT "avsluta med -1"
+100 R%=0
+110 WHILE R%<10 AND KORT%(R%)>-1 ' Snurra 10 ggr eller tills -1 „r inmatat.
+120   R%=R%+1
+130   LOCATE 10,30 : PRINT "Kortadress ";:INPUT KORT%(R%) ' Mata in adress
+140   LOCATE 20,30+R%*4 : PRINT KORT%(R%)
+150 WEND
+160 IF R%=1 THEN 450
+170 R%=R%-1
+180 '
+190 ' L„s av 32 kanaler p† korten
+200 CLS
+210 DOOMSDAY=0
+220 WHILE NOT DOOMSDAY ' O„ndlig loop
+225   '
+230   FOR I%=1 TO R% ' Ett varv f”r varje utvalt kort.
+240     FOR KANAL%=0 TO 31 STEP 2 ' Ett varv per tv† kanaler.
+250       FOR K1%=0 TO 1 ' F”r att fixa uppspaltningen.
+260         OUT &H301,KORT%(I%) ' V„lj kortadress.
+270         OUT &H302,KANAL%+K1%+32+64 ' V„ljer kanal, -5 till +5V, f”rst„rkning =1.
+280         OUT &H303,0 ' 12 bitars uppl”sning.
+290         '
+300         IF INP(&H301)>=128 THEN 300 ' V„nta tills omvandling „r klar.
+310         '
+320         MEST%=(INP(&H301) AND 15) ' L„s de fyra mest signifikanta bitarna.
+330         MINST%=INP(&H300) ' L„s de †tta minst signifikanta bitarna.
+340         IN%=MEST%*256+MINST% ' L„gg ihop bitarna till ett tal.
+350         VOLT=INT(1000*IN%/409.6)/1000 ' R„kna om till volt.
+360         '
+370         LOCATE KANAL%/2+1,0+40*K1%+1
+380         PRINT VOLT " volt p† kanal " KANAL%+K1% "       "
+390         LOCATE 20,30 : PRINT "Nu m„ts kanal " KANAL%+K1%+1 "   "
+400         LOCATE 22,30 : PRINT "P† kort nr " KORT%(I%)
+410       NEXT K1%
+420     NEXT KANAL%
+430   NEXT I%
+440 WEND
+450 END
+