8048 Assembler für aktuelle Windows-Versionen

Gast #7725410
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...

Angehängte Dateien:
#7725449
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
Gast #7725477
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
Angehängte Dateien:
#7727511
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.

#7727557
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

#7727754
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

#7727790
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.

#7727885
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

Gast #7727908
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.

Angehängte Dateien:
Moderator Persönliche Seite #7728068
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.

#7728102
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/

#7728108
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.

Persönliche Seite #7728127
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.

#7728157
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
#7728211
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."

Beitrag #7728225 wurde von einem Moderator gelöscht.
#7729745
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

#7739730
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.

Gast #7739755
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...

#7739782
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.

#7739784
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

Angehängte Dateien:
Gast #7739814
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...

Gast #7739816
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...

#7740154
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.

Gast #7763309
Lesenswert?

In der Anlage findet Ihr eine Vorlage für eine 8fach-LED-Anzeigeplatine mit dem DS8286D als Treiber-IC passend für das 8048-Testbrett.

Ich stelle alle von mir zu verantwortenden Daten unter Public Domain.

PS: Die Platine kann 1:1 auch am JU+TE KOMPAKT 32/32, JU+TE MINI 32/32 und JU+TE MINI PLUS 32/32 verwendet werden.

Angehängte Dateien:
Gast #7768978
Lesenswert?

Peter D. schrieb:

Puh, da verheizt ja der Treiber-IC schon 20-mal mehr Strom (160mA), als heutige high efficiency LEDs (je 1mA).

Da hätte man ja wenigstens einen CMOS (SN74HC541) nehmen sollen, statt solchen Stromfressern aus dem Museum.

Von diesen Teilen habe ich noch Etliche da.

Eine kompatible Variante mit 74LS(HCT)245 als SMD-Version hatte ich in 2013 für den Comp JU+TE r "gemacht". Guckst Du hier: https://hc-ddr.hucki.net/wiki/doku.php/tiny/emueller

Datei: anzeige8.zip

Michael schrieb:

Warum nicht auf GIT zu den anderen 8048 Assemblern die niemand benutzt?

Da hast Du natürlich recht.

Michael identifiziert sich:

Benutzername mkn Vorname Michael Nachname
Firma HW Entwicklung Angemeldet seit 10.06.2023 13:34 Beiträge 2138

Sehr viiiiiiiiiiiiiiiiel Zeit...scheint nicht gut zu laufen...

#7769287
Lesenswert?

Der G. schrieb:

In der Anlage findet Ihr eine Vorlage für eine 8fach-LED-Anzeigeplatine

Ich sehe gerade, die Pinbelegung ist ja saugefährlich! Wenn man das Flachkabel verkehrt rum steckt (VCC, GND vertauscht), entweicht der magische Rauch aus dem DS8286. Da ist eine bekannte Pinbelegung, wie z.B. beim STK500, deutlich besser. Oder man bestückt verpolsichere Steckerwannen.

Angehängte Dateien:
Gast #7787633
Lesenswert?

In der Anlage findet Ihr eine Laser-Vorlage und eine FreeCAD-Assembly (A2plus muß installiert sein) einer Sperrholz-Konsole passend für das 8048-Experimentiersystem, siehe: Beitrag "Re: [V] Leerplatine 8048 Testbrett"

Die Dicke des im Projekt verwendeten Sperrholzes beträgt 4mm.

Ich stelle diese Daten unter Public Domain.

Angehängte Dateien:
#7959381
Lesenswert?

Alle Holzarbeiten sind nun abgeschlossen. In den Bildern wurde versucht, den Baufortschritt zu dokumentieren.

Die Einzelteile habe ich mir anhand der SVG-Dateien auslasern lassen. Dienstleister dafür gibt es genug. Aber aufpassen. Das Sperrholz muß 4mm dick sein. Ist beim ersten Versuch leider schief gegangen. Außerdem. Grundplatte richtig herum zusammenkleben (siehe Bild 2 und Bild 4). Auch hier 1 Fehlversuch.

Platinen und Bauteile werde ich heute bestellen.

#7959413
Lesenswert?

Schmeckt nicht gut schrieb:

Ich baue das Projekt nach

Du schreibst, dass du das Projekt nachbaust, aber welches Projekt? Nur das kleine Board mit den Abmessungen 70 x 100 mm mit dem 8048 und einem EPROM, oder alle Experimentierplatten?

Ich habe jetzt mal in anderen Threads recherchiert, um herauszufinden, um welche Bauteile es sich handeln könnte (Bilder)!

Du beschäftigst dich für meinen Geschmack zu lange und zu intensiv mit den Holzarbeiten, als mit dem eigentlichen Elektronikprojekt, wobei sich deine Holzarbeiten durchaus sehen lassen können!

👍

Daraus schließen ich, dass es sich dabei nicht nur um eine Experimentierplatte handeln soll, sondern um ein optisch gut aussehendes Endgerät fürs Wohnzimmer. Was soll es denn können?

Angehängte Dateien:
: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren