This summer, I had the incredible opportunity to join the Datacom team at Broadcom and work
on a unique challenge: transitioning an existing assembly program to Metal C. While I had prior
experience with C, C++, and some exposure to assembly in university, this was my first time
diving into mainframe programming. The experience pushed me out of my comfort zone—and
ended up being one of the most rewarding projects of my career so far.
Background: What Is Metal C?
IBM Metal C is a variant of the C programming language designed for low-level, system-level
development on mainframes. It behaves like traditional C but allows direct manipulation of
hardware via embedded assembly. With Metal C, you can control registers, manage branching,
and interface with assembler routines—while maintaining the structure and readability of a high-
level language.
But Metal C isn’t without its trade-offs:
- You need to set up a custom runtime environment.
- Common C functions like printf() aren’t available—you have to route output through
mechanisms like SYSPRINT in JCL.
- System-level tasks must be handled with extreme care to avoid disrupting the broader
environment.
Project Highlights
Over the course of the summer, my project hit several key milestones:
- Setting Up the Metal C Runtime. I created a reusable Metal C runtime environment for
initializing and terminating programs. This setup is now abstracted into a C header file,
making it easier for other developers at Broadcom to use going forward.
- Linking with Legacy Assembly. To fit into the existing system, I had to reorganize the
code so that an assembler program could call into my Metal C program. I implemented a
proper save area and passed parameters correctly across the language boundary—an
important foundation for mixed-language support.
- Calling Assembly from Metal C. In addition to being called by assembly, my Metal C
program also had to invoke an external assembler subroutine. I successfully loaded the
subprogram, passed parameters, and returned control—effectively bridging both
directions between Metal C and assembler.
- Working in an Agile Environment. Following a two-week sprint cycle, with daily
standups and weekly reviews, helped keep the project moving and goals clear.
This fast-paced, team-oriented structure sharpened my communication skills and helped me adapt, collaborate, and deliver under tight timelines.
Challenges I Faced
This project also came with its share of challenges that pushed me to grow:
Limited Documentation. Beyond IBM’s official Metal C documentation, there were few external resources available. Stack Overflow and other forums offered little help, since very few developers have worked with Metal C. I had to rely heavily on experimentation, IBM manuals, and internal knowledge from teammates.
Integrating with Legacy Assembly Code. The legacy assembler code wasn’t designed for mixed-language integration. It:
- Used registers that conflicted with Metal C’s expectations
- Employed obsolete addressing modes incompatible with Metal C
- Required custom parameter passing conventions
These issues forced me to dig deep into system internals and collaborate closely with experienced engineers across Broadcom.
Each challenge required a different kind of problem-solving—technical, collaborative, and creative—and taught me far more than any classroom assignment or tutorial ever could.
Reflection & Gratitude
Being a summer worker at Broadcom was a valuable and memorable experience. I not only deepened my technical skills in mainframe development, assembly, and Metal C, but also developed a greater appreciation for the complexity and significance of legacy systems in modern enterprise infrastructure.
Because this was the first instance of Metal C being integrated into this particular system, the work I did now serves as a working template for future transitions. The project provides a tested approach to:
- Configuring the Metal C runtime
- Bridging between Metal C and assembler
- Managing real-world mainframe constraints
I’m incredibly grateful to my manager, the Datacom team, and everyone who supported me throughout this project. Their encouragement, guidance, and technical mentorship made me feel welcomed and empowered from day one.