Forum: Projekte & Code 8048 Assembler für aktuelle Windows-Versionen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Der G. (gutmensch)


Angehängte Dateien:

Lesenswert?

Ich beziehe mich hier auf folgenden Beitrag:
Beitrag "Alles neu macht der Mai"

Präambel

Im folgenden werde ich das Projekt als Objektcode bereitstellen, 
ungeachtet der Defizite des momentanen Bewertungssystems. Es scheint 
(bedauerlicherweise) so zu sein, das der Betreiber dieses Forums kein 
Gespür dafür hat, wie man "Beitragende" motiviert - und dies ist keine 
exklusive Einschätzung meinerseits!. Ganz offenbar wird auch hier den 
"Besonderen", (wie z.Zt. überall in der Gesellschaft) ungeachtet Ihrer 
teilweise schädlichen Einflüsse, zuviel Raum gegeben. Ich will es 
trotzdem versuchen!

Worum geht es? Was ist "48as"?

- Das Programm "48as" ist ein rudimentärer Assembler für den 
Mikroprozessor Intel 8048.
-  Der Syntax orientiert sich am "MCS-48(TM) FAMILY OF SINGLE CHIP 
MICROCOMPUTERS USER'S MANUAL".
-  Eine direkte Ansteuerung des "EPROM-EMU-NG" von Kris Sekula wurde 
implementiert.

Das Projekt wird innerhalb der nächsten 1 bis 2 Wochen in diesem Faden 
hochgeladen, sofern dieser Beitrag nicht der "Zensur" zum Opfer fällt...

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

Hier ein Beispielprogramm zum Testen:
1
;******************************************************
2
;
3
; THIS IS AN EXAMPLE PROGRAM FOR THE 8048 PROCESSOR.
4
; IT IS TAKEN FROM PAGE 335 OF THE NOVEMBER 15, 1984
5
; ISSUE OF EDN.
6
;
7
; DATA LOGGER SOFTWARE
8
; BY: WUNNAVA V. SUBBARAO
9
;     FLORIDA INTERNATIONAL UNIVERSITY, MIAMI, FLORIDA
10
;
11
INITIAL:  MOV R0,#10   ;R0 & R1 LOADED WITH #10, WHICH
12
          MOV R1,#10   ;HAS BLANK CODE LOCATION IN PAGE
13
START:    CLR A        ;THREE.
14
          OUTL P1,A    ;INPUT SHIFT REG IS IN LOAD MODE
15
          OUTL BUS,A   ;P17 & P16 AT 0.
16
          CPL C        ;CARRY COMPLEMENTED
17
          JC DIGIT1
18
DIGIT0:   MOV A,#00    ;MAKE P20=0 ACTIVATING DIGIT 0
19
          OUTL P2,A    ;IF CARRY=0 & LOAD R0 INTO A FOR
20
          MOV A,R0     ;DISPLAY ON DIGIT 0.
21
          JMP DISPLAY
22
DIGIT1:   MOV A,#01    ;MAKE P20=1 ACTIVATING DIGIT 1
23
          OUTL P2,A    ;IF CARRY=1 & LOAD R1 INTO A FOR
24
          MOV A,R1     ;DISPLAY ON DIGIT 1.
25
DISPLAY:  MOVP3 A,@A   ;CONTENTS OF CODE TABLE ON PG 3
26
          OUTL BUS,A   ;PUT ONTO DATA BUS.
27
          MOV R6,#0FH
28
DLY1:     DJNZ R6,DLY1 ;DELAY LOOP 1, SMALL DELAY.
29
          JT1 OTOREG   ;IF T1=1, JUMP TO NEXT LOAD.
30
          MOV R6,#0FFH ;IF T1=0 PROGRAM CHECKS DEBOUNCE
31
DLY2:     DJNZ R6,DLY2 ;IF SO, KEEP CHECKING DEBOUNCE.
32
          JT1 OTOREG   ;OTHERWISE JUMP TO NEXT LOAD.
33
SERDAT:   MOV A,#80H   ;P17 MADE 1 FOR SHIFT MODE.
34
          OUTL P1,A
35
          MOV R3,#04   ;SHIFT CTR R3 INITIALIZED TO 4.
36
          MOV R4,#00   ;INITIALIZE DATA REGISTER TO 0.
37
NXTB:     CLR C        ;T0 EXAMINED & T0 CORRESPONDING
38
RDXIN:    JNT0 SHIFTD  ;DATA BIT IS SHIFTED INTO R4, IF
39
          CPL C        ;T0=0 (CARRY CLEARED);IF T0=1,
40
SHIFTD:   MOV A,R4     ;SET CARRY=1, THEN SHIFT INTO R4
41
          RLC A
42
          MOV R4,A
43
CLOCK:    MOV A,#0C0H  ;CLOCK SIGNAL GENERATED ON P16,
44
          OUTL P1,A    ;KEEPING P17=1 IN SHIFT MODE.
45
          MOV A,#80H   ;FOR SHIFTING P16 DATA.
46
          OUTL P1,A
47
          DJNZ R3,NXTB ;DECREMENT R3 AND CHECK FOR 0 TO
48
          MOV A,R4     ;SEE IF ALL 4 SHIFTS ARE OVER.
49
          XRL A,R5     ;IF R4=R5 SIGNIFYING OLD DATA,
50
          JZ START     ;PROGRAM JUMPS TO START AT 0004
51
DIGITSH:  MOV A,R4     ;FOR NEW DATA, LOAD R5 WITH
52
          MOV R5,A     ;CONTENTS OF R4.
53
          MOV A,R0     ;R0 SHIFTED TO R1.
54
          MOV R1,A
55
          MOV A,R4     ;NEW DATA IN R4 SHIFTED TO R0.
56
          MOV R0,A
57
          JMP START    ;JUMP TO START FOR NEXT WORD.
58
OTOREG:   MOV R5,#0FFH ;ONE TIME ONLY REG (R5)=#FF.
59
          JMP START    ;JUMP TO START FOR NEXT WORD.
60
;
61
          ORG    0300H ; TABLE ADDRESS
62
63
          DFB    3FH   ;0   D7 D6 D5 D4 D3 D2 D1 D0
64
          DFB    06H   ;1   dp  g  f  e  d  c  b  a
65
          DFB    5BH   ;2               a
66
          DFB    4FH   ;3           ---------
67
          DFB    66H   ;4           |       |
68
          DFB    6DH   ;5         f |       | b
69
          DFB    7DH   ;6           |       |
70
          DFB    07H   ;7           ---------
71
          DFB    7FH   ;8           |   g   |
72
          DFB    6FH   ;9         e |       | c
73
          DFB    77H   ;A           |       |
74
          DFB    7CH   ;B           ---------
75
          DFB    58H   ;C               d
76
          DFB    5EH   ;D
77
          DFB    79H   ;E
78
          DFB    71H   ;F
79
          DFB    00H   ;BLANK
80
81
          END

von Der G. (gutmensch)


Angehängte Dateien:

Lesenswert?

Quelle mußte leicht modifiziert werden: DFB->DB
1
;******************************************************
2
;
3
; THIS IS AN EXAMPLE PROGRAM FOR THE 8048 PROCESSOR.
4
; IT IS TAKEN FROM PAGE 335 OF THE NOVEMBER 15, 1984
5
; ISSUE OF EDN.
6
;
7
; DATA LOGGER SOFTWARE
8
; BY: WUNNAVA V. SUBBARAO
9
;     FLORIDA INTERNATIONAL UNIVERSITY, MIAMI, FLORIDA
10
;
11
INITIAL:  MOV R0,#10   ;R0 & R1 LOADED WITH #10, WHICH
12
          MOV R1,#10   ;HAS BLANK CODE LOCATION IN PAGE
13
START:    CLR A        ;THREE.
14
          OUTL P1,A    ;INPUT SHIFT REG IS IN LOAD MODE
15
          OUTL BUS,A   ;P17 & P16 AT 0.
16
          CPL C        ;CARRY COMPLEMENTED
17
          JC DIGIT1
18
DIGIT0:   MOV A,#00    ;MAKE P20=0 ACTIVATING DIGIT 0
19
          OUTL P2,A    ;IF CARRY=0 & LOAD R0 INTO A FOR
20
          MOV A,R0     ;DISPLAY ON DIGIT 0.
21
          JMP DISPLAY
22
DIGIT1:   MOV A,#01    ;MAKE P20=1 ACTIVATING DIGIT 1
23
          OUTL P2,A    ;IF CARRY=1 & LOAD R1 INTO A FOR
24
          MOV A,R1     ;DISPLAY ON DIGIT 1.
25
DISPLAY:  MOVP3 A,@A   ;CONTENTS OF CODE TABLE ON PG 3
26
          OUTL BUS,A   ;PUT ONTO DATA BUS.
27
          MOV R6,#0FH
28
DLY1:     DJNZ R6,DLY1 ;DELAY LOOP 1, SMALL DELAY.
29
          JT1 OTOREG   ;IF T1=1, JUMP TO NEXT LOAD.
30
          MOV R6,#0FFH ;IF T1=0 PROGRAM CHECKS DEBOUNCE
31
DLY2:     DJNZ R6,DLY2 ;IF SO, KEEP CHECKING DEBOUNCE.
32
          JT1 OTOREG   ;OTHERWISE JUMP TO NEXT LOAD.
33
SERDAT:   MOV A,#80H   ;P17 MADE 1 FOR SHIFT MODE.
34
          OUTL P1,A
35
          MOV R3,#04   ;SHIFT CTR R3 INITIALIZED TO 4.
36
          MOV R4,#00   ;INITIALIZE DATA REGISTER TO 0.
37
NXTB:     CLR C        ;T0 EXAMINED & T0 CORRESPONDING
38
RDXIN:    JNT0 SHIFTD  ;DATA BIT IS SHIFTED INTO R4, IF
39
          CPL C        ;T0=0 (CARRY CLEARED);IF T0=1,
40
SHIFTD:   MOV A,R4     ;SET CARRY=1, THEN SHIFT INTO R4
41
          RLC A
42
          MOV R4,A
43
CLOCK:    MOV A,#0C0H  ;CLOCK SIGNAL GENERATED ON P16,
44
          OUTL P1,A    ;KEEPING P17=1 IN SHIFT MODE.
45
          MOV A,#80H   ;FOR SHIFTING P16 DATA.
46
          OUTL P1,A
47
          DJNZ R3,NXTB ;DECREMENT R3 AND CHECK FOR 0 TO
48
          MOV A,R4     ;SEE IF ALL 4 SHIFTS ARE OVER.
49
          XRL A,R5     ;IF R4=R5 SIGNIFYING OLD DATA,
50
          JZ START     ;PROGRAM JUMPS TO START AT 0004
51
DIGITSH:  MOV A,R4     ;FOR NEW DATA, LOAD R5 WITH
52
          MOV R5,A     ;CONTENTS OF R4.
53
          MOV A,R0     ;R0 SHIFTED TO R1.
54
          MOV R1,A
55
          MOV A,R4     ;NEW DATA IN R4 SHIFTED TO R0.
56
          MOV R0,A
57
          JMP START    ;JUMP TO START FOR NEXT WORD.
58
OTOREG:   MOV R5,#0FFH ;ONE TIME ONLY REG (R5)=#FF.
59
          JMP START    ;JUMP TO START FOR NEXT WORD.
60
;
61
          ORG    0300H ; TABLE ADDRESS
62
          DB    3FH   ;0   D7 D6 D5 D4 D3 D2 D1 D0
63
          DB    06H   ;1   dp  g  f  e  d  c  b  a
64
          DB    5BH   ;2               a
65
          DB    4FH   ;3           ---------
66
          DB    66H   ;4           |       |
67
          DB    6DH   ;5         f |       | b
68
          DB    7DH   ;6           |       |
69
          DB    07H   ;7           ---------
70
          DB    7FH   ;8           |   g   |
71
          DB    6FH   ;9         e |       | c
72
          DB    77H   ;A           |       |
73
          DB    7CH   ;B           ---------
74
          DB    58H   ;C               d
75
          DB    5EH   ;D
76
          DB    79H   ;E
77
          DB    71H   ;F
78
          DB    00H   ;BLANK
79
          END

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

1
x:\>fc /b PRG.BIN mc_test.bin
2
Comparing files PRG.HEX and MC_TEST.BIN
3
00000048: FF 00
4
00000049: FF 00
5
...

Wenn du EPROMs schreiben willst, solltest du das Fuellbyte
auf 0xFF aendern. Sieht ansonsten gut aus.

von Der G. (gutmensch)


Lesenswert?

Danke für den Hinweis.

Ich hatte "00H" gewählt, weil es für "NOP" steht. "FFH" läßt sich 
natürlich "nachbrennen" - gute Idee. Werde es einstellbar machen.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Hm, auch wenn ich vor Jahrzehnten schon meine MCS-48 Controller entsorgt 
habe wäre es doch bestimmt für diejenigen, die damit noch etwas machen 
wollen "interessant", das Wiindowsprogramm hier zum Download angeboten 
zu bekommen, oder ?

von Motopick (motopick)


Lesenswert?

Ralph S. schrieb:
> Hm, auch wenn ich vor Jahrzehnten schon meine MCS-48 Controller entsorgt
> habe wäre es doch bestimmt für diejenigen, die damit noch etwas machen
> wollen "interessant", das Wiindowsprogramm hier zum Download angeboten
> zu bekommen, oder ?

Wenn du nicht solange warten willst:
https://daveho.github.io/asm48/

>asm48 PRG.ASM
*** asm48 v0.4.1 ***
   Assembled 785 bytes.

Erfordert aber einige Anpassungen in der Assemblerquelle
ORG -> .ORG
DFB -> .DB
usw. usf.

von Ralph S. (jjflash)


Lesenswert?

Motopick schrieb:
> Wenn du nicht solange warten willst:
> https://daveho.github.io/asm48/

Wie gesagt, ich brauche es ja nicht. Allerdings für die, die das 
interessiert, wäre der Code dann schon von Vorteil.

:- ) für die, die einen Assembler für MCS-48 brauchen (und hier eben 
nicht fündig werden) gibt es "naken asm", der sehr klein, sehr schnell 
ist und einige andere MCU's dazu auch kann (wie bspw. MCS-51, AVR, STM8 
etc.)

https://www.mikekohn.net/micro/naken_asm.php

von Soul E. (soul_eye)


Lesenswert?

Wer heute noch mit MCS-48 arbeitet, der tut das meist im Kontext mit 
historischen Computern. Und da gibt es as, dieser Assembler unterstützt 
so ziemlich jeden älteren Mikrocontroller oder-prozessor.

http://john.ccac.rwth-aachen.de:8000/as/

von Martin H. (horo)


Lesenswert?

Soul E. schrieb:
> im Kontext mit historischen Computern. Und da gibt es as,

Es gibt alles, dennoch ist es eine schöne Übung, einen Assembler „from 
scratch“ zu bauen. Vielleicht nicht lebenswichtig, aber eine Art 
Ingenieur-Sudoku.
Dieser 1-Pass Z80-Assembler z.B. ist einfach und geradeaus strukturiert 
(Lexer -> Compiler -> basta) und kann leicht aufgebohrt werden, um 
nützliche undokumentierte Opcodes zu erzeugen oder Intel-Hex statt binär 
auszugeben.
Das ist gerade mein Zeitvertreib.

https://github.com/sarnau/Z80DisAssembler

von Motopick (motopick)


Lesenswert?

Ralph S. schrieb:
> Motopick schrieb:
>> Wenn du nicht solange warten willst:
>> https://daveho.github.io/asm48/
>
> Wie gesagt, ich brauche es ja nicht. Allerdings für die, die das
> interessiert, wäre der Code dann schon von Vorteil.

Ja ist doch. :)
Man sollte aber lex und yacc dabei haben.
Brauchen tue ich es auch nicht.

Ein kommerzieller Crossassembler ist der Cross-32 Meta-Assembler.
Der ist nun recht unversell: 1802, 320C1X, 320C2X, 320C5X, 34010,
37700, 3870, 4004, 50740, 64180, 6502, 65816, 6800, 68000, 6805, 6809, 
68HC08, 68HC11, 68HC16, 782XX, 7831X, 80166, 80186, 80251B, 80251S,
8041, 8048, 8051, 8085, 8086, 8096, COP400, COP800, H8-300, H8-300H,
H8-500, HMCS400, NEC7500, NEC7810, PIC165X, PIC16XX, PIC17XX, ST6, ST9,
SUPER8, TLCS90, TMS370, TMS7000, TMS9900, V800, Z180, Z280, Z380, Z8,
Z80 und Z8002 stehen da auf der Liste der unterstuetzten Prozessoren.

> :- ) für die, die einen Assembler für MCS-48 brauchen (und hier eben
> nicht fündig werden) gibt es "naken asm", der sehr klein, sehr schnell
> ist und einige andere MCU's dazu auch kann (wie bspw. MCS-51, AVR, STM8
> etc.)
>
> https://www.mikekohn.net/micro/naken_asm.php

Sieht interessant aus. Leider fehlen dem die TI-DSPs.

von Harald K. (kirnbichler)


Lesenswert?

Motopick schrieb:
> Leider fehlen dem die TI-DSPs.

Sind das MCS-48?!

von Rick (rick)


Lesenswert?

Motopick schrieb:
> Der ist nun recht unversell: 1802, 320C1X, 320C2X, 320C5X, 34010,
> 37700, 3870, 4004, 50740, 64180, 6502, 65816, 6800, 68000, 6805, 6809,
> 68HC08, 68HC11, 68HC16, 782XX, 7831X, 80166, 80186, 80251B, 80251S,
> 8041, 8048, 8051, 8085, 8086, 8096, COP400, COP800, H8-300, H8-300H,
> H8-500, HMCS400, NEC7500, NEC7810, PIC165X, PIC16XX, PIC17XX, ST6, ST9,
> SUPER8, TLCS90, TMS370, TMS7000, TMS9900, V800, Z180, Z280, Z380, Z8,
> Z80 und Z8002 stehen da auf der Liste der unterstuetzten Prozessoren.
Das wird nix werden. Dem fehlt die Unterstützung für 7805 und NE555...

SCRN

von Motopick (motopick)


Lesenswert?

Harald K. schrieb:
> Motopick schrieb:
>> Leider fehlen dem die TI-DSPs.
>
> Sind das MCS-48?!

Wer nicht kognitiv beschraenkt ist, koennte die darauf emulieren.
Und wer 555 benutzt, der weiss es nicht besser.

von Der G. (gutmensch)


Angehängte Dateien:

Lesenswert?

In der Anlage befindet sich der Assembler.

Ich möchte mich an dieser Stelle ausdrücklich bei Kris Sekula für die 
Genehmigung zum Beipacken seiner Firmware des "EPROM EMULATOR NG" 
bedanken.

Hinweise:

Die Anwendung wurde weder zertifiziert noch signiert. Möglicherweise 
wird es Fehlermeldungen bei deren Start geben. Die Anwendung wurde auf 
einer 64Bit-Plattform kompiliert. Möglicherweise ist sie auf 
32Bit-Betriebssystemen nicht lauffähig.

Vor der Nutzung bitte ich die dem Archiv beigefügte Datei "Lesen.txt" 
gründlich zu "studieren". Danke.

Themenbezogene, konstruktive Beiträge sind jederzeit willkommen - der 
Rest wird ignoriert.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Der G. schrieb:
> In der Anlage befindet sich der Assembler.

Kein Sourcecode?

Da muss man aber viel Gottvertrauen haben. Und ... was hat das unter 
"Projekte & Code" verloren?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Der G. schrieb:
> In der Anlage befindet sich der Assembler.

Wird der Source-Code noch nachgeliefert?

Titel dieses Subforums:

Hier könnt ihr Projekte, Schaltungen oder Codeschnipsel vorstellen. 
Projekte bitte nur mit Code oder Schaltplan posten (falls ihr nur Fotos 
vorstellen möchtet, bitte in "Zeigt her eure Kunstwerke"). Bitte hier 
keine Fragen posten.

Wenn es keinen Source-Code gibt, muss ich den Thread nach "µC und 
Elektronik" verschieben.

von Ingo W. (uebrig) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Wird der Source-Code noch nachgeliefert?

im anderen, von Soul E. genannten Beispiel
Beitrag "Re: 8048 Assembler für aktuelle Windows-Versionen"
ist der Source-Code dabei.

von Rbx (rcx)


Lesenswert?

Ich sehe hier den "Workflow" nicht.
Es gibt wohl Assembler und "Treiber" für Windows, da ist dann aber auch 
gleich die Erklärung dabei, wie eingeschränkt die Nutzbarkeit ist.

So gesehen erscheint diese Seite (s.o.) hier schon mal etwas 
freundlicher bzw. transparenter:
https://github.com/daveho/asm48

Welche aber auch mit Bedacht zu genießen wäre, weil Windows früher ja 
auch einen DOS - Unterbau hatte, den man nutzen konnte. Und das war 
sogar recht trickreich gelöst.

Aktuell könnte man z.B. schauen, was über WSL ginge, denn auch das 
gehört zum aktuellen Windows.
https://blog.golioth.io/program-mcu-from-wsl2-with-usb-support/

von Harald K. (kirnbichler)


Lesenswert?

Rbx schrieb:
> Welche aber auch mit Bedacht zu genießen wäre, weil Windows früher ja
> auch einen DOS - Unterbau hatte, den man nutzen konnte.

Windows hat schon sehr, sehr lange keinen "DOS-Unterbau" mehr. 
Ernstgemeintes Windows hatte sogar noch nie einen, und das war schon vor 
über 30 Jahren.

Aber den brauchts auch nicht, um stinknormale Kommandozeilenanwendungen 
nutzen zu können - dazu braucht man definitiv kein "WSL". Auch kein 
"cygwin" oder andere Krücken. Oh, und auch keine "bash".

Das einzige, was der geneigte Ahnungslose kapieren muss, ist, daß ein 
Doppelklick auf die *.exe des Assemblers kein sinnvolles Resultat 
liefert.

von Ingo W. (uebrig) Benutzerseite


Lesenswert?

Harald K. schrieb:
> Windows hat schon sehr, sehr lange keinen "DOS-Unterbau" mehr.
> Ernstgemeintes Windows hatte sogar noch nie einen, und das war schon vor
> über 30 Jahren.

Wobei man für "echte" DOS-Programme auf solchen Unterbau auch nicht mehr 
angewiesen ist. Dies kann man unter
https://de.wikipedia.org/wiki/DOSBox
(für alle heute üblichen Plattformen) ausführen. Die emuliert auch die 
damals üblichen Sound/Grafikkarten, die hier aber nicht benötigt werden.

von Rbx (rcx)


Lesenswert?

Harald K. schrieb:
> Das einzige, was der geneigte Ahnungslose kapieren muss, ist, daß ein
> Doppelklick auf die *.exe des Assemblers kein sinnvolles Resultat
> liefert.

Ich sehe immer noch keinen Workflow. Soll das so etwas werden wie 
Jasmin?

von Harald K. (kirnbichler)


Lesenswert?

Rbx schrieb:
> Ich sehe immer noch keinen Workflow.

Workflow? Das ist ein Kommandozeilenprogramm.

Da kannst Du Dir jeden beliebigen "Workflow" drumherumbasteln, so, wie 
man das mit jedem beliebigen anderen Kommandozeilenprogramm auch macht.

Wer oder was soll "jasmin" sein?

von Motopick (motopick)


Lesenswert?

Im Zweifel kann man ja das Original von Intel auch heute noch benutzen:
1
>ASM48 PRG.ASM
2
3
ISIS-II MCS-48/UPI-41 MACRO ASSEMBLER, V4.2
4
5
ASSEMBLY COMPLETE,   NO ERRORS
6
.
7
.
8
ASM48 PRG.ASM 
9
10
11
12
ISIS-II MCS-48/UPI-41 MACRO ASSEMBLER, V4.2              PAGE    1
13
14
15
  LOC  OBJ         LINE        SOURCE STATEMENT
16
17
                      1 ;******************************************************
18
                      2 ;
19
                      3 ; THIS IS AN EXAMPLE PROGRAM FOR THE 8048 PROCESSOR.
20
                      4 ; IT IS TAKEN FROM PAGE 335 OF THE NOVEMBER 15, 1984
21
                      5 ; ISSUE OF EDN, AND AFTER ONLY FORMAT MODIFICATIONS,
22
                      6 ; IT IS PASSED ON AS AN EXAMPLE, FREE OF CHARGE,
23
                      7 ; BY UNIVERSAL CROSS-ASSEMBLERS.
24
                      8 ;
25
                      9 ; DATA LOGGER SOFTWARE
26
                     10 ; BY: WUNNAVA V. SUBBARAO
27
                     11 ;     FLORIDA INTERNATIONAL UNIVERSITY, MIAMI, FLORIDA
28
                     12 ;
29
  0000 B80A          13 INITIAL:  MOV R0,#10   ;R0 & R1 LOADED WITH #10, WHICH
30
  0002 B90A          14           MOV R1,#10   ;HAS BLANK CODE LOCATION IN PAGE
31
  0004 27            15 START:    CLR A        ;THREE.
32
  0005 39            16           OUTL P1,A    ;INPUT SHIFT REG IS IN LOAD MODE
33
  0006 02            17           OUTL BUS,A   ;P17 & P16 AT 0.
34
  0007 A7            18           CPL C        ;CARRY COMPLEMENTED
35
  0008 F610          19           JC DIGIT1
36
  000A 2300          20 DIGIT0:   MOV A,#00    ;MAKE P20=0 ACTIVATING DIGIT 0
37
  000C 3A            21           OUTL P2,A    ;IF CARRY=0 & LOAD R0 INTO A FOR
38
  000D F8            22           MOV A,R0     ;DISPLAY ON DIGIT 0.
39
  000E 0414          23           JMP DISPLAY
40
  0010 2301          24 DIGIT1:   MOV A,#01    ;MAKE P20=1 ACTIVATING DIGIT 1
41
  0012 3A            25           OUTL P2,A    ;IF CARRY=1 & LOAD R1 INTO A FOR
42
  0013 F9            26           MOV A,R1     ;DISPLAY ON DIGIT 1.
43
  0014 E3            27 DISPLAY:  MOVP3 A,@A   ;CONTENTS OF CODE TABLE ON PG 3
44
  0015 02            28           OUTL BUS,A   ;PUT ONTO DATA BUS.
45
  0016 BE0F          29           MOV R6,#0FH
46
  0018 EE18          30 DLY1:     DJNZ R6,DLY1 ;DELAY LOOP 1, SMALL DELAY.
47
  001A 5644          31           JT1 OTOREG   ;IF T1=1, JUMP TO NEXT LOAD.
48
  001C BEFF          32           MOV R6,#0FFH ;IF T1=0 PROGRAM CHECKS DEBOUNCE
49
  001E EE1E          33 DLY2:     DJNZ R6,DLY2 ;IF SO, KEEP CHECKING DEBOUNCE.
50
  0020 5644          34           JT1 OTOREG   ;OTHERWISE JUMP TO NEXT LOAD.
51
  0022 2380          35 SERDAT:   MOV A,#80H   ;P17 MADE 1 FOR SHIFT MODE.
52
  0024 39            36           OUTL P1,A
53
  0025 BB04          37           MOV R3,#04   ;SHIFT CTR R3 INITIALIZED TO 4.
54
  0027 BC00          38           MOV R4,#00   ;INITIALIZE DATA REGISTER TO 0.
55
  0029 97            39 NXTB:     CLR C        ;T0 EXAMINED & T0 CORRESPONDING
56
  002A 262D          40 RDXIN:    JNT0 SHIFTD  ;DATA BIT IS SHIFTED INTO R4, IF
57
  002C A7            41           CPL C        ;T0=0 (CARRY CLEARED);IF T0=1,
58
  002D FC            42 SHIFTD:   MOV A,R4     ;SET CARRY=1, THEN SHIFT INTO R4
59
  002E F7            43           RLC A
60
  002F AC            44           MOV R4,A
61
  0030 23C0          45 CLOCK:    MOV A,#0C0H  ;CLOCK SIGNAL GENERATED ON P16,
62
  0032 39            46           OUTL P1,A    ;KEEPING P17=1 IN SHIFT MODE.
63
  0033 2380          47           MOV A,#80H   ;FOR SHIFTING P16 DATA.
64
  0035 39            48           OUTL P1,A
65
  0036 EB29          49           DJNZ R3,NXTB ;DECREMENT R3 AND CHECK FOR 0 TO
66
  0038 FC            50           MOV A,R4     ;SEE IF ALL 4 SHIFTS ARE OVER.
67
  0039 DD            51           XRL A,R5     ;IF R4=R5 SIGNIFYING OLD DATA,
68
  003A C604          52           JZ START     ;PROGRAM JUMPS TO START AT 0004
69
  003C FC            53 DIGITSH:  MOV A,R4     ;FOR NEW DATA, LOAD R5 WITH
70
  003D AD            54           MOV R5,A     ;CONTENTS OF R4.
71
72
73
74
ISIS-II MCS-48/UPI-41 MACRO ASSEMBLER, V4.2              PAGE    2
75
76
77
  LOC  OBJ         LINE        SOURCE STATEMENT
78
79
  003E F8            55           MOV A,R0     ;R0 SHIFTED TO R1.
80
  003F A9            56           MOV R1,A
81
  0040 FC            57           MOV A,R4     ;NEW DATA IN R4 SHIFTED TO R0.
82
  0041 A8            58           MOV R0,A
83
  0042 0404          59           JMP START    ;JUMP TO START FOR NEXT WORD.
84
  0044 BDFF          60 OTOREG:   MOV R5,#0FFH ;ONE TIME ONLY REG (R5)=#FF.
85
  0046 0404          61           JMP START    ;JUMP TO START FOR NEXT WORD.
86
                     62 ;
87
  0300               63           ORG    0300H ; TABLE ADDRESS
88
                     64 
89
  0300 3F            65           DB     3FH   ;0   D7 D6 D5 D4 D3 D2 D1 D0
90
  0301 06            66           DB     06H   ;1   dp  g  f  e  d  c  b  a
91
  0302 5B            67           DB     5BH   ;2               a
92
  0303 4F            68           DB     4FH   ;3           ---------
93
  0304 66            69           DB     66H   ;4           |       |
94
  0305 6D            70           DB     6DH   ;5         f |       | b
95
  0306 7D            71           DB     7DH   ;6           |       |
96
  0307 07            72           DB     07H   ;7           ---------
97
  0308 7F            73           DB     7FH   ;8           |   g   |
98
  0309 6F            74           DB     6FH   ;9         e |       | c
99
  030A 77            75           DB     77H   ;A           |       |
100
  030B 7C            76           DB     7CH   ;B           ---------
101
  030C 58            77           DB     58H   ;C               d
102
  030D 5E            78           DB     5EH   ;D
103
  030E 79            79           DB     79H   ;E
104
  030F 71            80           DB     71H   ;F
105
  0310 00            81           DB     00H   ;BLANK
106
                     82 
107
                     83           END
108
109
USER SYMBOLS
110
CLOCK  0030    DIGIT0 000A    DIGIT1 0010    DIGITS 003C    DISPLA 0014    DLY1   0018    DLY2   001E    INITIA 0000    
111
NXTB   0029    OTOREG 0044    RDXIN  002A    SERDAT 0022    SHIFTD 002D    START  0004    
112
113
ASSEMBLY COMPLETE,   NO ERRORS

von Harald K. (kirnbichler)


Lesenswert?

Motopick schrieb:
> Im Zweifel kann man ja das Original von Intel auch heute noch benutzen

... wenn man eine Umgebung hat, unter der das noch läuft. Da braucht man 
halt DOSBox, ein 32-Bit-Windows oder eine andere Art der Emulation.

BTW: Wo findet sich das Original?

von Motopick (motopick)


Lesenswert?

Harald K. schrieb:
> Motopick schrieb:
>> Im Zweifel kann man ja das Original von Intel auch heute noch benutzen
>
> ... wenn man eine Umgebung hat, unter der das noch läuft. Da braucht man
> halt DOSBox, ein 32-Bit-Windows oder eine andere Art der Emulation.
>
> BTW: Wo findet sich das Original?

(M)Ein 64 bittiges kann das viel einfacher. :)

>MSDOS ISIS.EXE
DOS ISIS environment V1.0
=asm48 prg.asm

ISIS-II MCS-48/UPI-41 MACRO ASSEMBLER, V4.2

ASSEMBLY COMPLETE,   NO ERRORS
=exit

Das Original findet sich natuerlich bei Intel.
Eine Kopie konnte(/kann) man anfordern, oder muss sie selbst finden.

LICENSE:  Intel grants you ...

"You agree to prevent any unauthorized copying of the Software."

von Harald K. (kirnbichler)


Lesenswert?

Motopick schrieb:
> Das Original findet sich natuerlich bei Intel.
> Eine Kopie konnte(/kann) man anfordern, oder muss sie selbst finden.

Tolle Antwort.

Beitrag #7728225 wurde vom Autor gelöscht.
von Der G. (gutmensch)


Angehängte Dateien:

Lesenswert?

In der Anlage findet Ihr eine Vorlage für ein 8048-Testbrett.

Ich stelle die Daten unter Public Domain.

Nicht ganz uneigennützig verweise ich hier auf folgenden 
Diskussionfaden: Beitrag "[V] Leerplatine 8048 Testbrett"

Es ist immer noch einer Leerplatine vorhanden.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Soul E. schrieb:
> Wer heute noch mit MCS-48 arbeitet, der tut das meist im Kontext
> mit
> historischen Computern. Und da gibt es as, dieser Assembler unterstützt
> so ziemlich jeden älteren Mikrocontroller oder-prozessor.
>
> http://john.ccac.rwth-aachen.de:8000/as/

Yeah! Mit dem habbich mal vor zig Jahren gewerkelt, habe noch ein paar 
8741, mit denen ich damals noch bisschen gebastelt habe. Der taugt.

Gruss
WK

von Oliver S. (oliverso)


Lesenswert?

Frank M. schrieb:
> Wird der Source-Code noch nachgeliefert?

Natürlich nicht. Das ganze ist doch von vornherein als Systemkritik 
angelegt.

Der G. schrieb:
> Präambel
>
> Im folgenden werde ich das Projekt als Objektcode bereitstellen,
> ungeachtet der Defizite des momentanen Bewertungssystems.


Oliver

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Der G. schrieb:
> In der Anlage findet Ihr eine Vorlage für ein 8048-Testbrett.

Ich habe auch mit so einem Board mit µCs angefangen. Allerdings mit 
8031, die 8048 waren damals schon tot. Insbesondere MUL und DIV 
erleichtern deutlich die Programmierung.

Als dann 1993 die Atmel Flash-Typen rauskamen, verstaubten die Platinen 
mit Adreßlatch und EPROM-Fassung. Alle IO-Pins nutzen zu können war ein 
großer Vorteil. Ich hatte mir auch einen Prommer selber gebastelt. Ein 
AT89C51 programmiert den Ziel AT89C51. Ein UV-Löschgerät mag ich nicht 
mal mit spitzen Fingern mehr anfassen.

1995 gabs dann den Keil C51, der erstaunlich kompakten Code erzeugte. Da 
konnte man sich ne Menge Assemblertricks von abgucken, auf die ich nie 
selber gekommen wäre. Meine Routinen waren allesamt deutlich größer und 
langsamer. Auch die RAM Nutzung wurde deutlich effektiver 
(Daten-Overlay).
Seitdem bin ich skeptisch, wenn jemand behauptet, er wäre in Assembler 
schneller und könne alles besser machen. Er ist einfach in C nur noch 
nicht gut.

von Der G. (gutmensch)


Lesenswert?

Hallo Peter.

Vorweg. Dieses Projekt verfolgt keinem "erzieherischen" Zweck. Mir ging 
es nur darum, eine wiederaufgetauchte Kiste mit 80C49 sinnvoll zu 
nutzen. Verfügbare Assembler gab es nur für DOS und/oder als 
Kommandozeilen Interface. Ich wollte es etwas komfortabler und das 
Ergebnis meiner Bemühungen nicht im "Nirvana" verschwinden lassen...

Zum Thema C und den diversen Optimierungen (wie von Dir bewundert und 
gelobt) kann ich aus eigener beruflicher Erfahrung sagen, daß diese 
unter Umständen zu völlig unreproduzierbarem Verhalten im Feld führen. 
Mein Vorgänger führte dies auf EMV-Probleme zurück und ließ die Hardware 
für viel Geld von einem Dienstleister optimieren. Dies brachte leider 
nicht den gewünschten Erfolg.

Am Ende des Tages war die eingeschaltete Optimierung die Wurzel des 
Übels. Wenn ein C-Compiler die Intension des Programmieres 1:1 umsetzt, 
gibt es in der Regel keine Probleme. Blind verlassen auf das, was einem 
ein C-Compiler "anbietet" würde ich mich allerdings nicht mehr...

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Der G. schrieb:
> Mein Vorgänger führte dies auf EMV-Probleme zurück und ließ die Hardware
> für viel Geld von einem Dienstleister optimieren. Dies brachte leider
> nicht den gewünschten Erfolg.

Das klingt stark danach, daß bei Optimierung die Mainloop schneller 
durchlaufen wird und keine funktionierende Entprellung implementiert 
wurde. Der Effekt ist dann, daß Störungen (EMV) den Ablauf durcheinander 
bringen können. Die Abschaltung der Optimierung baut quasi Delays mit 
ein, was eine minimale aber recht armselige Entprellung bewirken kann.

Ein beliebter Anfängerfehler ist auch, daß Pins an verschiedenen Stellen 
eingelesen werden und angenommen wird, daß sie dazwischen auch immer den 
gleichen Wert haben.
Alle äußeren Signale dürfen nur an einer Stelle im Ablauf eingelesen 
werden und müssen dann entstört/entprellt werden.

Der G. schrieb:
> Blind verlassen auf das, was einem
> ein C-Compiler "anbietet" würde ich mich allerdings nicht mehr...

Wenn ein Programm nicht das gewünschte macht, sollte man immer den 
Fehler finden wollen. Dabei hilft es, wenn man mit Assembler noch nicht 
ganz eingerostet ist und das Listing analysieren kann.
Was überhaupt nicht hilft, ist planloses Umschreiben des Codes. Der 
Compiler sieht sofort, wenn Du das gleiche hinschreibst, nur mit anderen 
Worten (i++; statt i=i+1;).

In der Regel sitzt der Fehler aber immer vor dem Bildschirm. Ich habe in 
all den Jahren bisher nur einen einzigen Bug in meiner Keil C51 Version 
gefunden, der betrifft zusammengesetzte Operationen mit long Variablen.

Dafür habe ich schon oft logische Fehler gemacht, es hat also nie 
funktionieren dürfen. Und man wundert sich, daß für diese Stelle kein 
Code generiert wurde, weil der Ausdruck nie wahr werden kann und der 
Compiler ihn deshalb wegoptimiert hat. Ohne Optimierung compiliert er 
natürlich auch den größten Stuss hin.

von Tom A. (toma)


Angehängte Dateien:

Lesenswert?

Schönes Projekt, hatte vor vielen Jahren, noch unter CP/M, auch einen 
8048-Assembler geschrieben. Damals natürlich ohne grafische Oberfläche, 
einfach nur Quellcode rein, Intel-Hex raus. Danach bin ich auch auf 
MCS51 umgestiegen.

Hatte mir seinerzeit eine Platine gebaut deren Monitorprogramm es 
erlaubt Programme ins RAM zu übertragen (Download) und dort auszuführen. 
Das ersparte das lästige programmieren von EPROM's. Habe das Projekt 
kürzlich wieder ausgegraben und im Moment sitze ich grad dran und bastel 
mir eine IDE dafür. Soll mal Editor, Hex-Editor und Debugger für 
Assembler und C können. Den Assembler und C-Compiler schreibe ich 
allerdings nicht selbst, werde wohl den SDCC dafür nutzen.

Der Multifile-Editor ist schon beinahe fertig, fehlen nur noch 
Kleinigkeiten und Syntaxhighlight. Im Anhang ein Bild davon.

Tom

von Der G. (gutmensch)


Lesenswert?

Hallo Peter,

ich programmiere nun schon seit mehr als 20 Jahren in C. Jedoch nicht 
ausschließlich.

Natürlich gibt es den einen oder anderen "Brett vor dem Kopf"-Moment. 
Aber nach so langer Zeit sollten die von Dir beschriebenen 
"Anfängerfehler", wenn überhaupt, nur noch selten auftreten.

Habe alle Projekte "geerbt". Jeder mit ein wenig Ahnung hat eine Idee 
davon, was passiert, wenn man versucht, in riesigen Projekten "alles 
hübsch zu machen"...

Auch wenn der Geist willig ist - das Fleisch ist schwach...

von Der G. (gutmensch)


Lesenswert?

Tom A. schrieb:
> ... Programme ins RAM zu übertragen (Download) und dort auszuführen.
> Das ersparte das lästige programmieren von EPROM's...

Ich habe mich da dem EPROM Emulator NG von Kris Sekula (natürlich mit 
dessen Genehmigung) bedient. Warum das Rad neu erfinden...

von Peter D. (peda)


Lesenswert?

Der G. schrieb:
> Habe alle Projekte "geerbt".

Ich habe auch ein recht großes Projekt geerbt. Als der Kollege die Firma 
verlassen hat, habe ich gemerkt, daß er ein sehr guter Programmierer 
war. Ich konnte Erweiterungen hinzufügen, ohne das gesamte Programm 
analysiert zu haben und alles hat sofort geklappt, ohne jegliche 
Seiteneffekte.
Als wir das Projekt starteten, habe ich mich gewundert, warum er ohne 
die Hardware schon arbeiten konnte. Er hatte einige #ifdefs eingefügt 
und das C51-Programm fast komplett unter Unix entwickelt.

Der G. schrieb:
> Aber nach so langer Zeit sollten die von Dir beschriebenen
> "Anfängerfehler", wenn überhaupt, nur noch selten auftreten.

Auch wenn nur selten, sitzt dann das Problem vor dem Bildschirm.
Gerne wird vergessen, daß Interrupts parallele Instanzen sind, mit denen 
man atomar kommunizieren muß. Beim 8051 mit 4 Interruptleveln muß man 
also bis zu 5 Instanzen verwalten. Und Interruptfehler können erstmal 
lange Zeit unentdeckt bleiben. Dabei können auch Laufzeiteffekte 
auftreten, d.h. die Fehler treten je nach Optimierungslevel mehr oder 
weniger häufig auf.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.